@pure-ds/core 0.7.50 → 0.7.51
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.
- package/dist/types/src/js/common/common.d.ts +16 -3
- package/dist/types/src/js/common/common.d.ts.map +1 -1
- package/dist/types/src/js/pds-core/pds-generator.d.ts.map +1 -1
- package/package.json +1 -1
- package/public/assets/js/app.js +8 -2132
- package/public/assets/js/lit.js +3 -1031
- package/public/assets/js/pds-ask.js +9 -464
- package/public/assets/js/pds-autocomplete.js +7 -639
- package/public/assets/js/pds-enhancers.js +1 -1471
- package/public/assets/js/pds-manager.js +3460 -17635
- package/public/assets/js/pds-toast.js +1 -30
- package/public/assets/js/pds.js +2 -1969
- package/public/assets/pds/core/pds-ask.js +9 -464
- package/public/assets/pds/core/pds-autocomplete.js +7 -639
- package/public/assets/pds/core/pds-enhancers.js +1 -1471
- package/public/assets/pds/core/pds-manager.js +3460 -17635
- package/public/assets/pds/core/pds-toast.js +1 -30
- package/public/assets/pds/core.js +2 -1969
- package/public/assets/pds/external/lit.js +3 -1031
- package/src/js/common/common.js +111 -23
- package/src/js/pds-core/pds-generator.js +13 -4
- package/public/assets/js/app.js.map +0 -7
- package/public/assets/js/lit.js.map +0 -7
- package/public/assets/js/pds-ask.js.map +0 -7
- package/public/assets/js/pds-autocomplete.js.map +0 -7
- package/public/assets/js/pds-enhancers.js.map +0 -7
- package/public/assets/js/pds-manager.js.map +0 -7
- package/public/assets/js/pds-toast.js.map +0 -7
- package/public/assets/js/pds.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/js/pds-core/pds-enums.js", "../../../src/js/pds-core/pds-ontology.js", "../../../src/js/common/common.js", "../../../src/js/pds-core/pds-config.js", "../../../src/js/pds-core/pds-generator.js", "../../../src/js/common/pds-log.js", "../../../src/js/common/localization.js", "../../../src/js/pds-singleton.js", "../../../src/js/pds-core/pds-registry.js", "../../../src/js/pds-core/pds-runtime.js", "../../../src/js/pds-core/pds-enhancers.js", "../../../src/js/pds-core/pds-enhancers-meta.js", "../../../src/js/pds-core/pds-paths.js", "../../../src/js/common/font-loader.js", "../../../node_modules/pure-web/src/js/auto-definer.js", "../../../src/js/pds-core/pds-start-helpers.js", "../../../src/js/pds-core/pds-theme-utils.js", "../../../src/js/pds-core/pds-live.js", "../../../src/js/pds-live-manager/import-contract.js", "../../../src/js/pds-live-manager/template-service.js", "../../../src/js/pds-live-manager/tailwind-conversion-rules.json", "../../../src/js/pds.js", "../../../src/js/pds-live-manager/conversion-service.js", "../../../src/js/pds-live-manager/import-service.js", "../../../src/js/pds-live-manager/import-history-service.js"],
|
|
4
|
-
"sourcesContent": ["// Static enums for design system values\nexport const enums = {\n FontWeights: {\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n LineHeights: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n\n BorderWidths: {\n hairline: 0.5,\n thin: 1,\n medium: 2,\n thick: 3,\n },\n\n RadiusSizes: {\n none: 0,\n small: 4,\n medium: 8,\n large: 16,\n xlarge: 24,\n xxlarge: 32\n },\n\n ShadowDepths: {\n none: \"none\",\n light: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n medium:\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n deep: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n extreme: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n },\n TransitionSpeeds: {\n fast: 150,\n normal: 250,\n slow: 350,\n },\n\n AnimationEasings: {\n linear: \"linear\",\n ease: \"ease\",\n \"ease-in\": \"ease-in\",\n \"ease-out\": \"ease-out\",\n \"ease-in-out\": \"ease-in-out\",\n bounce: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n },\n TouchTargetSizes: {\n compact: 36,\n standard: 44, // iOS/Android accessibility standard\n comfortable: 48,\n spacious: 56,\n },\n\n LinkStyles: {\n inline: \"inline\", // Normal inline text links\n block: \"block\", // Block-level links\n button: \"button\", // Button-like links (flex with touch target)\n },\n\n FocusStyles: {\n ring: \"ring\", // Box-shadow ring (default)\n outline: \"outline\", // Browser outline\n border: \"border\", // Border change\n glow: \"glow\", // Subtle glow effect\n },\n\n TabSizes: {\n compact: 2,\n standard: 4,\n wide: 8,\n },\n\n SelectIcons: {\n chevron: \"chevron\", // Standard chevron down\n arrow: \"arrow\", // Simple arrow\n caret: \"caret\", // Triangle caret\n none: \"none\", // No icon\n },\n IconSizes: {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 32,\n xl: 48,\n \"2xl\": 64,\n \"3xl\": 96,\n },\n};\n", "\uFEFF// Pure Design System Ontology (PDS)\n// This file is the single source-of-truth metadata for primitives, components, tokens, themes and enhancements.\n// Used by MCP/query tooling for searching and correlating concepts.\n\nexport const ontology = {\n meta: { \n name: \"Pure Design System Ontology\", \n version: \"1.0.0\",\n description: \"Complete metadata registry for PDS primitives, components, utilities, and tokens\"\n },\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // DESIGN TOKENS\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n tokens: {\n colors: {\n semantic: [\"primary\", \"secondary\", \"accent\", \"success\", \"warning\", \"danger\", \"info\"],\n neutral: [\"gray\"],\n shades: [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950],\n surface: [\"base\", \"subtle\", \"elevated\", \"sunken\", \"overlay\", \"inverse\", \"translucent\"],\n text: [\"default\", \"muted\", \"subtle\", \"inverse\", \"primary\", \"success\", \"warning\", \"danger\", \"info\"]\n },\n spacing: {\n scale: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"8\", \"10\", \"12\", \"16\", \"20\", \"24\"],\n semantic: [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]\n },\n typography: {\n families: [\"heading\", \"body\", \"mono\"],\n sizes: [\"xs\", \"sm\", \"base\", \"lg\", \"xl\", \"2xl\", \"3xl\", \"4xl\", \"5xl\"],\n weights: [\"light\", \"normal\", \"medium\", \"semibold\", \"bold\"]\n },\n radius: {\n scale: [\"none\", \"sm\", \"base\", \"md\", \"lg\", \"xl\", \"2xl\", \"full\"]\n },\n shadows: {\n scale: [\"none\", \"sm\", \"base\", \"md\", \"lg\", \"xl\", \"inner\"]\n },\n themes: [\"light\", \"dark\"],\n breakpoints: {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280\n }\n },\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // PRIMITIVES (Single-class styled components)\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n primitives: [\n { \n id: \"badge\", \n name: \"Badge / Pill\", \n description: \"Inline status indicators and labels\",\n selectors: [\".badge\", \".badge-primary\", \".badge-secondary\", \".badge-success\", \".badge-info\", \".badge-warning\", \".badge-danger\", \".badge-outline\", \".badge-sm\", \".badge-lg\", \".pill\", \".tag\", \".chip\"],\n tags: [\"status\", \"label\", \"indicator\", \"inline\"],\n category: \"feedback\"\n },\n { \n id: \"card\", \n name: \"Card\", \n description: \"Content container with padding, border-radius, and optional shadow\",\n selectors: [\".card\", \".card-basic\", \".card-elevated\", \".card-outlined\", \".card-interactive\"],\n tags: [\"container\", \"content\", \"grouping\"],\n category: \"container\"\n },\n { \n id: \"surface\", \n name: \"Surface\", \n description: \"Smart surface classes with automatic text/background color handling\",\n selectors: [\".surface-base\", \".surface-subtle\", \".surface-elevated\", \".surface-sunken\", \".surface-overlay\", \".surface-inverse\", \".surface-translucent\", \".surface-translucent-25\", \".surface-translucent-50\", \".surface-translucent-75\", \".surface-primary\", \".surface-secondary\", \".surface-success\", \".surface-warning\", \".surface-danger\", \".surface-info\"],\n tags: [\"background\", \"theming\", \"color\", \"container\"],\n category: \"theming\"\n },\n { \n id: \"callout\", \n name: \"Callout\", \n description: \"Contextual information and notification messages\",\n selectors: [\".callout\", \".callout-info\", \".callout-success\", \".callout-warning\", \".callout-danger\", \".callout-error\", \".callout-dismissible\"],\n tags: [\"feedback\", \"message\", \"notification\", \"status\", \"information\"],\n category: \"feedback\"\n },\n {\n id: \"empty-state\",\n name: \"Empty State\",\n description: \"Empty state layout for missing data or onboarding\",\n selectors: [\".empty-state\"],\n tags: [\"empty\", \"no-data\", \"zero\", \"placeholder\", \"onboarding\", \"state\"],\n category: \"feedback\"\n },\n { \n id: \"dialog\", \n name: \"Dialog\", \n description: \"Modal dialog element\",\n selectors: [\"dialog\", \".dialog\"],\n tags: [\"modal\", \"overlay\", \"popup\", \"modal\"],\n category: \"overlay\"\n },\n { \n id: \"divider\", \n name: \"Divider\", \n description: \"Horizontal rule with optional label\",\n selectors: [\"hr\", \"hr[data-content]\"],\n tags: [\"separator\", \"line\", \"content-divider\"],\n category: \"layout\"\n },\n { \n id: \"table\", \n name: \"Table\", \n description: \"Data tables with responsive and styling variants\",\n selectors: [\"table\", \".table-responsive\", \".table-striped\", \".table-bordered\", \".table-compact\", \".data-table\"],\n tags: [\"data\", \"grid\", \"tabular\", \"responsive\"],\n category: \"data\"\n },\n { \n id: \"button\", \n name: \"Button\", \n description: \"Interactive button element with variants\",\n selectors: [\"button\", \".btn-primary\", \".btn-secondary\", \".btn-outline\", \".btn-danger\", \".btn-sm\", \".btn-xs\", \".btn-lg\", \".btn-working\", \".icon-only\"],\n tags: [\"interactive\", \"action\", \"cta\", \"form\"],\n category: \"action\"\n },\n { \n id: \"fieldset\", \n name: \"Fieldset Group\", \n description: \"Form field grouping for radio/checkbox groups\",\n selectors: [\"fieldset[role='group']\", \"fieldset[role='radiogroup']\", \"fieldset.buttons\"],\n tags: [\"form\", \"grouping\", \"radio\", \"checkbox\"],\n category: \"form\"\n },\n { \n id: \"label-field\", \n name: \"Label+Input\", \n description: \"Semantic label wrapping form input\",\n selectors: [\"label\", \"label:has(input)\", \"label:has(select)\", \"label:has(textarea)\"],\n tags: [\"form\", \"input\", \"accessibility\"],\n category: \"form\"\n },\n { \n id: \"accordion\", \n name: \"Accordion\", \n description: \"Collapsible content sections\",\n selectors: [\".accordion\", \".accordion-item\", \"details\", \"details > summary\"],\n tags: [\"expandable\", \"collapsible\", \"disclosure\"],\n category: \"disclosure\"\n },\n { \n id: \"icon\", \n name: \"Icon\", \n description: \"SVG icon element with size and color variants\",\n selectors: [\"pds-icon\", \".icon-xs\", \".icon-sm\", \".icon-md\", \".icon-lg\", \".icon-xl\", \".icon-primary\", \".icon-secondary\", \".icon-accent\", \".icon-success\", \".icon-warning\", \".icon-danger\", \".icon-info\", \".icon-muted\", \".icon-subtle\", \".icon-text\", \".icon-text-start\", \".icon-text-end\"],\n tags: [\"graphic\", \"symbol\", \"visual\"],\n category: \"media\"\n },\n { \n id: \"figure\", \n name: \"Figure/Media\", \n description: \"Figure element for images with captions\",\n selectors: [\"figure\", \"figure.media\", \"figcaption\"],\n tags: [\"image\", \"media\", \"caption\"],\n category: \"media\"\n },\n { \n id: \"gallery\", \n name: \"Gallery\", \n description: \"Image gallery grid\",\n selectors: [\".gallery\", \".gallery-grid\", \".img-gallery\"],\n tags: [\"images\", \"grid\", \"collection\"],\n category: \"media\"\n },\n {\n id: \"form\",\n name: \"Form Container\",\n description: \"Form styling and layout\",\n selectors: [\"form\", \".form-container\", \".form-actions\", \".field-description\"],\n tags: [\"form\", \"input\", \"submission\"],\n category: \"form\"\n },\n {\n id: \"navigation\",\n name: \"Navigation\",\n description: \"Navigation elements and menus\",\n selectors: [\"nav\", \"nav[data-dropdown]\", \"menu\", \"nav menu li\"],\n tags: [\"menu\", \"links\", \"routing\"],\n category: \"navigation\"\n }\n ],\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // WEB COMPONENTS\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n components: [\n { \n id: \"pds-tabstrip\", \n name: \"Tab Strip\", \n description: \"Tabbed interface component\",\n selectors: [\"pds-tabstrip\"],\n tags: [\"tabs\", \"navigation\", \"panels\"],\n category: \"navigation\"\n },\n { \n id: \"pds-drawer\", \n name: \"Drawer\", \n description: \"Slide-out panel overlay\",\n selectors: [\"pds-drawer\"],\n tags: [\"panel\", \"overlay\", \"sidebar\"],\n category: \"overlay\"\n },\n { \n id: \"pds-fab\", \n name: \"FAB\", \n description: \"Floating Action Button with expandable satellite actions\",\n selectors: [\"pds-fab\"],\n tags: [\"button\", \"action\", \"floating\", \"interactive\"],\n category: \"action\"\n },\n { \n id: \"pds-upload\", \n name: \"Upload\", \n description: \"File upload component with drag-and-drop\",\n selectors: [\"pds-upload\"],\n tags: [\"file\", \"upload\", \"drag-drop\", \"form\"],\n category: \"form\"\n },\n { \n id: \"pds-icon\", \n name: \"Icon\", \n description: \"SVG icon web component\",\n selectors: [\"pds-icon\"],\n tags: [\"icon\", \"graphic\", \"svg\"],\n category: \"media\"\n },\n { \n id: \"pds-toaster\", \n name: \"Toaster\", \n description: \"Toast notification container\",\n selectors: [\"pds-toaster\"],\n tags: [\"notification\", \"toast\", \"feedback\"],\n category: \"feedback\"\n },\n { \n id: \"pds-form\", \n name: \"JSON Form\", \n description: \"Auto-generated form from JSON Schema\",\n selectors: [\"pds-form\"],\n tags: [\"form\", \"schema\", \"auto-generate\"],\n category: \"form\"\n },\n { \n id: \"pds-live-edit\", \n name: \"Live Edit\", \n description: \"Contextual live editing for PDS design settings\",\n selectors: [\"pds-live-edit\"],\n tags: [\"editor\", \"live\", \"config\", \"tooling\"],\n category: \"tooling\"\n },\n { \n id: \"pds-splitpanel\", \n name: \"Split Panel\", \n description: \"Resizable split pane layout\",\n selectors: [\"pds-splitpanel\"],\n tags: [\"layout\", \"resize\", \"panels\"],\n category: \"layout\"\n },\n { \n id: \"pds-scrollrow\", \n name: \"Scroll Row\", \n description: \"Horizontal scrolling row with snap points\",\n selectors: [\"pds-scrollrow\"],\n tags: [\"scroll\", \"horizontal\", \"carousel\"],\n category: \"layout\"\n },\n { \n id: \"pds-richtext\", \n name: \"Rich Text\", \n description: \"Rich text editor component\",\n selectors: [\"pds-richtext\"],\n tags: [\"editor\", \"wysiwyg\", \"text\"],\n category: \"form\"\n },\n { \n id: \"pds-calendar\", \n name: \"Calendar\", \n description: \"Date picker calendar component\",\n selectors: [\"pds-calendar\"],\n tags: [\"date\", \"picker\", \"calendar\"],\n category: \"form\"\n }\n ],\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // LAYOUT PATTERNS\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n layoutPatterns: [\n { \n id: \"container\", \n name: \"Container\", \n description: \"Centered max-width wrapper with padding\",\n selectors: [\".container\"],\n tags: [\"wrapper\", \"centered\", \"max-width\", \"page\"],\n category: \"structure\"\n },\n { \n id: \"grid\", \n name: \"Grid\", \n description: \"CSS Grid layout container\",\n selectors: [\".grid\"],\n tags: [\"layout\", \"columns\", \"css-grid\"],\n category: \"layout\"\n },\n { \n id: \"grid-cols\", \n name: \"Grid Columns\", \n description: \"Fixed column count grids\",\n selectors: [\".grid-cols-1\", \".grid-cols-2\", \".grid-cols-3\", \".grid-cols-4\", \".grid-cols-6\"],\n tags: [\"columns\", \"fixed\", \"grid\"],\n category: \"layout\"\n },\n { \n id: \"grid-auto\", \n name: \"Auto-fit Grid\", \n description: \"Responsive auto-fit grid with minimum widths\",\n selectors: [\".grid-auto-sm\", \".grid-auto-md\", \".grid-auto-lg\", \".grid-auto-xl\"],\n tags: [\"responsive\", \"auto-fit\", \"fluid\"],\n category: \"layout\"\n },\n { \n id: \"flex\", \n name: \"Flex Container\", \n description: \"Flexbox layout with direction and wrap modifiers\",\n selectors: [\".flex\", \".flex-wrap\", \".flex-col\", \".flex-row\"],\n tags: [\"flexbox\", \"layout\", \"alignment\"],\n category: \"layout\"\n },\n { \n id: \"grow\", \n name: \"Flex Grow\", \n description: \"Fill remaining flex space\",\n selectors: [\".grow\"],\n tags: [\"flex\", \"expand\", \"fill\"],\n category: \"layout\"\n },\n { \n id: \"stack\", \n name: \"Stack\", \n description: \"Vertical flex layout with predefined gaps\",\n selectors: [\".stack-sm\", \".stack-md\", \".stack-lg\", \".stack-xl\"],\n tags: [\"vertical\", \"spacing\", \"column\"],\n category: \"layout\"\n },\n { \n id: \"gap\", \n name: \"Gap\", \n description: \"Spacing between flex/grid children\",\n selectors: [\".gap-0\", \".gap-xs\", \".gap-sm\", \".gap-md\", \".gap-lg\", \".gap-xl\"],\n tags: [\"spacing\", \"margin\", \"gutters\"],\n category: \"spacing\"\n },\n { \n id: \"items\", \n name: \"Items Alignment\", \n description: \"Cross-axis alignment for flex/grid\",\n selectors: [\".items-start\", \".items-center\", \".items-end\", \".items-stretch\", \".items-baseline\"],\n tags: [\"alignment\", \"vertical\", \"cross-axis\"],\n category: \"alignment\"\n },\n { \n id: \"justify\", \n name: \"Justify Content\", \n description: \"Main-axis alignment for flex/grid\",\n selectors: [\".justify-start\", \".justify-center\", \".justify-end\", \".justify-between\", \".justify-around\", \".justify-evenly\"],\n tags: [\"alignment\", \"horizontal\", \"main-axis\"],\n category: \"alignment\"\n },\n { \n id: \"max-width\", \n name: \"Max-Width\", \n description: \"Content width constraints\",\n selectors: [\".max-w-sm\", \".max-w-md\", \".max-w-lg\", \".max-w-xl\"],\n tags: [\"width\", \"constraint\", \"readable\"],\n category: \"sizing\"\n },\n { \n id: \"section\", \n name: \"Section Spacing\", \n description: \"Vertical padding for content sections\",\n selectors: [\".section\", \".section-lg\"],\n tags: [\"spacing\", \"vertical\", \"padding\"],\n category: \"spacing\"\n },\n { \n id: \"mobile-stack\", \n name: \"Mobile Stack\", \n description: \"Stack on mobile, row on desktop\",\n selectors: [\".mobile-stack\"],\n tags: [\"responsive\", \"mobile\", \"breakpoint\"],\n category: \"responsive\"\n }\n ],\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // UTILITIES (Low-level single-purpose classes)\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n utilities: {\n text: {\n alignment: [\".text-left\", \".text-center\", \".text-right\"],\n color: [\".text-muted\"],\n overflow: [\".truncate\"]\n },\n backdrop: {\n base: [\".backdrop\"],\n variants: [\".backdrop-light\", \".backdrop-dark\"],\n blur: [\".backdrop-blur-sm\", \".backdrop-blur-md\", \".backdrop-blur-lg\"]\n },\n shadow: {\n scale: [\".shadow-sm\", \".shadow-base\", \".shadow-md\", \".shadow-lg\", \".shadow-xl\", \".shadow-inner\", \".shadow-none\"]\n },\n border: {\n gradient: [\".border-gradient\", \".border-gradient-primary\", \".border-gradient-accent\", \".border-gradient-secondary\", \".border-gradient-soft\", \".border-gradient-medium\", \".border-gradient-strong\"],\n glow: [\".border-glow\", \".border-glow-sm\", \".border-glow-lg\", \".border-glow-primary\", \".border-glow-accent\", \".border-glow-success\", \".border-glow-warning\", \".border-glow-danger\"],\n combined: [\".border-gradient-glow\"]\n },\n media: {\n image: [\".img-gallery\", \".img-rounded-sm\", \".img-rounded-md\", \".img-rounded-lg\", \".img-rounded-xl\", \".img-rounded-full\", \".img-inline\"],\n video: [\".video-responsive\"],\n figure: [\".figure-responsive\"]\n },\n effects: {\n glass: [\".liquid-glass\"]\n }\n },\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // RESPONSIVE UTILITIES (Breakpoint-prefixed)\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n responsive: {\n prefixes: [\"sm\", \"md\", \"lg\"],\n utilities: {\n grid: [\":grid-cols-2\", \":grid-cols-3\", \":grid-cols-4\"],\n flex: [\":flex-row\"],\n text: [\":text-sm\", \":text-lg\", \":text-xl\"],\n spacing: [\":p-6\", \":p-8\", \":p-12\", \":gap-6\", \":gap-8\", \":gap-12\"],\n width: [\":w-1/2\", \":w-1/3\", \":w-1/4\"],\n display: [\":hidden\", \":block\"]\n }\n },\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // ENHANCEMENTS (Progressive enhancement selectors)\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n enhancements: [\n {\n id: \"dropdown\",\n selector: \"nav[data-dropdown]\",\n description: \"Dropdown menu from nav element. Use data-dropdown-close on clickable descendants to dismiss on selection.\",\n tags: [\"menu\", \"interactive\", \"navigation\", \"dismiss\", \"close\"]\n },\n {\n id: \"dropdown-close\",\n selector: \"[data-dropdown-close]\",\n description: \"Declarative close marker for nav[data-dropdown] panels; clicking marked targets closes the open dropdown.\",\n tags: [\"dropdown\", \"menu\", \"dismiss\", \"close\", \"attribute\"]\n },\n {\n id: \"toggle\",\n selector: \"label[data-toggle]\",\n description: \"Toggle switch from checkbox\",\n tags: [\"switch\", \"boolean\", \"form\"]\n },\n {\n id: \"color-input\",\n selector: \"label[data-color]\",\n description: \"Enhanced color input with swatch shell and hex output\",\n tags: [\"color\", \"input\", \"form\"]\n },\n {\n id: \"range\",\n selector: 'input[type=\"range\"]',\n description: \"Enhanced range slider with output\",\n tags: [\"slider\", \"input\", \"form\"]\n },\n {\n id: \"required\",\n selector: \"form [required]\",\n description: \"Required field asterisk indicator\",\n tags: [\"validation\", \"form\", \"accessibility\"]\n },\n {\n id: \"open-group\",\n selector: \"fieldset[role=group][data-open]\",\n description: \"Editable checkbox/radio group\",\n tags: [\"form\", \"dynamic\", \"editable\"]\n },\n {\n id: \"working-button\",\n selector: \"button.btn-working, a.btn-working\",\n description: \"Button with loading spinner\",\n tags: [\"loading\", \"async\", \"feedback\"]\n },\n {\n id: \"labeled-divider\",\n selector: \"hr[data-content]\",\n description: \"Horizontal rule with centered label\",\n tags: [\"divider\", \"separator\", \"text\"]\n }\n ],\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // SEMANTIC CATEGORIES (For correlation and search)\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n categories: {\n feedback: {\n description: \"User feedback and status indicators\",\n primitives: [\"callout\", \"badge\", \"empty-state\"],\n components: [\"pds-toaster\"]\n },\n form: {\n description: \"Form inputs and controls\",\n primitives: [\"button\", \"fieldset\", \"label-field\", \"form\"],\n components: [\"pds-upload\", \"pds-form\", \"pds-richtext\", \"pds-calendar\"]\n },\n layout: {\n description: \"Page structure and content arrangement\",\n patterns: [\"container\", \"grid\", \"flex\", \"stack\", \"section\"],\n components: [\"pds-splitpanel\", \"pds-scrollrow\"]\n },\n navigation: {\n description: \"Navigation and routing\",\n primitives: [\"navigation\"],\n components: [\"pds-tabstrip\", \"pds-drawer\"]\n },\n media: {\n description: \"Images, icons, and visual content\",\n primitives: [\"icon\", \"figure\", \"gallery\"],\n components: [\"pds-icon\"]\n },\n overlay: {\n description: \"Modal and overlay content\",\n primitives: [\"dialog\"],\n components: [\"pds-drawer\"]\n },\n data: {\n description: \"Data display and tables\",\n primitives: [\"table\"]\n },\n theming: {\n description: \"Colors, surfaces, and visual theming\",\n primitives: [\"surface\"]\n },\n action: {\n description: \"Interactive actions and buttons\",\n primitives: [\"button\"],\n components: [\"pds-fab\"]\n }\n },\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // STYLE METADATA\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n styles: {\n typography: [\"headings\", \"body\", \"code\", \"links\"],\n icons: { source: \"svg\", sets: [\"core\", \"brand\"] },\n interactive: [\"focus\", \"hover\", \"active\", \"disabled\"],\n states: [\"success\", \"warning\", \"danger\", \"info\", \"muted\"]\n },\n\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n // SEARCH RELATIONS (Cross-concept mappings for intelligent search)\n // Used by MCP tools and Storybook ontology search to expand user queries\n // \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n searchRelations: {\n // Typography & Text\n text: [\"typography\", \"truncate\", \"text-muted\", \"text-primary\", \"text-left\", \"text-center\", \"text-right\", \"pds-richtext\", \"heading\", \"font\", \"label\", \"paragraph\", \"content\", \"ellipsis\", \"overflow\", \"input\"],\n font: [\"typography\", \"text\", \"heading\", \"font-size\", \"font-weight\", \"font-family\"],\n type: [\"typography\", \"text\", \"font\"],\n typography: [\"text\", \"font\", \"heading\", \"truncate\", \"text-muted\"],\n heading: [\"typography\", \"text\", \"font-size\", \"h1\", \"h2\", \"h3\"],\n truncate: [\"text\", \"overflow\", \"ellipsis\", \"clamp\", \"nowrap\", \"typography\"],\n ellipsis: [\"truncate\", \"text\", \"overflow\", \"clamp\"],\n overflow: [\"truncate\", \"scroll\", \"hidden\", \"text\"],\n paragraph: [\"text\", \"typography\", \"content\", \"body\"],\n content: [\"text\", \"typography\", \"body\", \"article\"],\n empty: [\"empty-state\", \"placeholder\", \"zero\", \"no-data\", \"onboarding\", \"callout\", \"card\", \"icon\", \"button\"],\n \"empty state\": [\"empty-state\", \"empty\", \"no-data\", \"zero\", \"onboarding\"],\n \"no data\": [\"empty-state\", \"empty\", \"zero\", \"placeholder\"],\n \n // Forms & Inputs\n form: [\"input\", \"field\", \"label\", \"button\", \"fieldset\", \"pds-form\", \"pds-upload\", \"pds-richtext\", \"pds-calendar\", \"required\", \"validation\", \"submit\"],\n input: [\"form\", \"field\", \"text\", \"label\", \"required\", \"validation\"],\n field: [\"form\", \"input\", \"label\", \"required\"],\n button: [\"btn\", \"interactive\", \"action\", \"submit\", \"form\", \"btn-primary\", \"btn-secondary\", \"btn-danger\", \"btn-working\", \"pds-fab\", \"floating\"],\n btn: [\"button\", \"interactive\", \"action\", \"pds-fab\"],\n fab: [\"pds-fab\", \"floating\", \"button\", \"action\", \"menu\"],\n floating: [\"fab\", \"pds-fab\", \"button\", \"action\"],\n toggle: [\"switch\", \"checkbox\", \"boolean\", \"form\", \"interactive\"],\n switch: [\"toggle\", \"checkbox\", \"boolean\"],\n slider: [\"range\", \"input\", \"form\"],\n range: [\"slider\", \"input\", \"form\"],\n checkbox: [\"toggle\", \"form\", \"fieldset\", \"boolean\"],\n radio: [\"fieldset\", \"form\", \"group\"],\n select: [\"dropdown\", \"form\", \"input\", \"menu\"],\n upload: [\"file\", \"pds-upload\", \"form\", \"drag-drop\"],\n file: [\"upload\", \"pds-upload\", \"form\"],\n \n // Modals & Overlays\n modal: [\"dialog\", \"pds-ask\", \"overlay\", \"popup\", \"backdrop\", \"pds-drawer\", \"alert\", \"confirm\", \"prompt\", \"lightbox\"],\n dialog: [\"modal\", \"pds-ask\", \"overlay\", \"popup\", \"backdrop\", \"alert\", \"confirm\", \"prompt\"],\n popup: [\"modal\", \"dialog\", \"dropdown\", \"popover\", \"overlay\", \"tooltip\"],\n popover: [\"popup\", \"tooltip\", \"overlay\"],\n overlay: [\"modal\", \"dialog\", \"backdrop\", \"drawer\", \"popup\"],\n drawer: [\"pds-drawer\", \"sidebar\", \"panel\", \"overlay\", \"modal\"],\n backdrop: [\"overlay\", \"modal\", \"dialog\", \"blur\"],\n confirm: [\"pds-ask\", \"dialog\", \"modal\"],\n prompt: [\"pds-ask\", \"dialog\", \"modal\", \"input\"],\n ask: [\"pds-ask\", \"dialog\", \"confirm\", \"prompt\", \"modal\"],\n \n // Navigation & Menus\n dropdown: [\"menu\", \"nav-dropdown\", \"select\", \"popover\"],\n menu: [\"dropdown\", \"navigation\", \"nav\", \"list\"],\n nav: [\"navigation\", \"menu\", \"dropdown\", \"tabs\", \"links\"],\n navigation: [\"nav\", \"menu\", \"tabs\", \"pds-tabstrip\", \"links\", \"routing\"],\n tabs: [\"pds-tabstrip\", \"navigation\", \"panels\"],\n tab: [\"tabs\", \"pds-tabstrip\", \"panel\"],\n link: [\"navigation\", \"anchor\", \"href\", \"routing\"],\n \n // Feedback & Notifications (callout is the primary term, alert is kept as alias for backwards compatibility)\n callout: [\"notification\", \"feedback\", \"message\", \"status\", \"toast\", \"information\", \"alert\", \"warning\", \"error\", \"info\", \"success\", \"danger\"],\n alert: [\"callout\", \"notification\", \"feedback\", \"message\", \"status\", \"toast\", \"modal\", \"dialog\", \"pds-ask\", \"confirm\", \"warning\", \"error\", \"info\", \"success\", \"danger\"],\n notification: [\"callout\", \"toast\", \"pds-toaster\", \"feedback\", \"message\", \"popup\", \"alert\"],\n toast: [\"pds-toaster\", \"notification\", \"callout\", \"feedback\", \"popup\", \"snackbar\", \"alert\"],\n feedback: [\"callout\", \"notification\", \"toast\", \"status\", \"badge\", \"validation\", \"error\", \"success\", \"alert\"],\n message: [\"callout\", \"notification\", \"feedback\", \"dialog\", \"toast\", \"alert\"],\n status: [\"badge\", \"callout\", \"indicator\", \"feedback\", \"state\", \"alert\"],\n error: [\"callout\", \"danger\", \"validation\", \"feedback\", \"warning\", \"alert\"],\n success: [\"callout\", \"feedback\", \"badge\", \"status\", \"check\", \"alert\"],\n warning: [\"callout\", \"caution\", \"feedback\", \"status\", \"alert\"],\n info: [\"callout\", \"information\", \"feedback\", \"status\", \"alert\"],\n danger: [\"callout\", \"error\", \"feedback\", \"destructive\", \"delete\", \"alert\"],\n badge: [\"status\", \"pill\", \"tag\", \"chip\", \"indicator\", \"label\"],\n pill: [\"badge\", \"tag\", \"chip\"],\n tag: [\"badge\", \"pill\", \"chip\", \"label\"],\n chip: [\"badge\", \"pill\", \"tag\"],\n \n // Layout & Structure\n layout: [\"grid\", \"flex\", \"stack\", \"container\", \"gap\", \"spacing\", \"pds-splitpanel\", \"section\"],\n grid: [\"layout\", \"columns\", \"css-grid\", \"table\", \"gallery\"],\n flex: [\"layout\", \"flexbox\", \"alignment\", \"row\", \"column\"],\n stack: [\"layout\", \"vertical\", \"spacing\", \"column\", \"gap\"],\n container: [\"wrapper\", \"layout\", \"max-width\", \"centered\"],\n gap: [\"spacing\", \"margin\", \"padding\", \"layout\"],\n spacing: [\"gap\", \"margin\", \"padding\", \"section\"],\n section: [\"spacing\", \"layout\", \"container\", \"page\"],\n split: [\"pds-splitpanel\", \"resizable\", \"panels\", \"layout\"],\n panel: [\"pds-splitpanel\", \"drawer\", \"sidebar\", \"section\"],\n \n // Cards & Surfaces\n card: [\"surface\", \"container\", \"elevated\", \"content\"],\n surface: [\"card\", \"background\", \"elevated\", \"theming\", \"color\"],\n box: [\"card\", \"container\", \"surface\"],\n elevated: [\"surface\", \"shadow\", \"card\"],\n \n // Colors & Theming\n color: [\"palette\", \"theme\", \"surface\", \"primary\", \"secondary\", \"accent\"],\n colours: [\"color\", \"palette\", \"theme\"],\n palette: [\"color\", \"theme\", \"tokens\"],\n theme: [\"color\", \"palette\", \"dark\", \"light\", \"surface\"],\n primary: [\"color\", \"button\", \"badge\", \"surface\"],\n secondary: [\"color\", \"button\", \"badge\", \"surface\"],\n accent: [\"color\", \"highlight\", \"surface\"],\n \n // Borders & Effects\n border: [\"border-gradient\", \"border-glow\", \"outline\", \"radius\"],\n effect: [\"border-gradient\", \"border-glow\", \"shadow\", \"glass\", \"animation\"],\n gradient: [\"border-gradient\", \"color\", \"background\"],\n glow: [\"border-glow\", \"effect\", \"shadow\"],\n shadow: [\"elevated\", \"effect\", \"depth\", \"card\"],\n radius: [\"rounded\", \"border\", \"corner\"],\n rounded: [\"radius\", \"border\", \"corner\"],\n glass: [\"liquid-glass\", \"backdrop\", \"blur\", \"effect\"],\n \n // Media & Icons\n icon: [\"pds-icon\", \"graphic\", \"symbol\", \"svg\", \"phosphor\"],\n image: [\"img\", \"figure\", \"gallery\", \"media\", \"picture\"],\n img: [\"image\", \"figure\", \"gallery\", \"media\"],\n figure: [\"image\", \"media\", \"caption\"],\n gallery: [\"images\", \"grid\", \"collection\", \"media\"],\n media: [\"image\", \"icon\", \"figure\", \"gallery\", \"video\"],\n \n // Tables & Data\n table: [\"data\", \"grid\", \"tabular\", \"rows\", \"columns\"],\n data: [\"table\", \"json\", \"form\", \"display\"],\n \n // Editors & Rich Content\n editor: [\"pds-richtext\", \"wysiwyg\", \"text\", \"content\"],\n wysiwyg: [\"editor\", \"pds-richtext\", \"richtext\"],\n richtext: [\"pds-richtext\", \"editor\", \"wysiwyg\", \"text\"],\n \n // Calendar & Dates\n calendar: [\"pds-calendar\", \"date\", \"picker\", \"datepicker\"],\n date: [\"calendar\", \"pds-calendar\", \"picker\", \"input\"],\n datepicker: [\"calendar\", \"date\", \"pds-calendar\"],\n \n // Scroll & Carousel\n scroll: [\"pds-scrollrow\", \"carousel\", \"horizontal\", \"overflow\"],\n carousel: [\"scroll\", \"pds-scrollrow\", \"slider\", \"gallery\"],\n \n // Accordion & Disclosure\n accordion: [\"details\", \"collapsible\", \"expandable\", \"disclosure\"],\n collapsible: [\"accordion\", \"details\", \"expandable\"],\n expandable: [\"accordion\", \"collapsible\", \"disclosure\"],\n details: [\"accordion\", \"summary\", \"disclosure\"],\n \n // Divider & Separator\n divider: [\"hr\", \"separator\", \"line\", \"rule\"],\n separator: [\"divider\", \"hr\", \"line\"],\n hr: [\"divider\", \"separator\", \"horizontal-rule\"],\n \n // Interactive States\n interactive: [\"hover\", \"focus\", \"active\", \"disabled\", \"button\", \"link\"],\n hover: [\"interactive\", \"effect\", \"state\"],\n focus: [\"interactive\", \"accessibility\", \"state\", \"outline\"],\n disabled: [\"interactive\", \"state\", \"muted\"],\n loading: [\"btn-working\", \"spinner\", \"async\", \"progress\"],\n spinner: [\"loading\", \"btn-working\", \"progress\"],\n \n // Accessibility\n accessibility: [\"a11y\", \"aria\", \"focus\", \"label\", \"required\"],\n a11y: [\"accessibility\", \"aria\", \"semantic\"],\n aria: [\"accessibility\", \"a11y\", \"role\"],\n required: [\"form\", \"validation\", \"asterisk\", \"input\"],\n validation: [\"form\", \"required\", \"error\", \"feedback\"],\n \n // Documentation & Getting Started\n start: [\"getting-started\", \"intro\", \"overview\", \"whatispds\"],\n intro: [\"getting-started\", \"overview\", \"start\", \"docs\"],\n getting: [\"getting-started\", \"start\", \"intro\"],\n overview: [\"intro\", \"start\", \"summary\", \"layout-overview\"],\n docs: [\"documentation\", \"reference\", \"guide\"],\n \n // Category keywords (for searching by category name - ONE-WAY only, not bidirectional)\n // These should NOT list individual items - that causes pollution when reversed\n primitive: [\"primitives\"],\n component: [\"components\"],\n enhancement: [\"enhancements\"],\n foundation: [\"foundations\", \"color\", \"icon\", \"typography\", \"spacing\", \"tokens\"],\n utility: [\"utilities\", \"text\", \"backdrop\", \"shadow\", \"border\", \"helper\"],\n pattern: [\"patterns\", \"layout\", \"responsive\", \"mobile-stack\"]\n }\n};\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// HELPER FUNCTIONS\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n// Safe matches with try/catch for invalid selectors or environments without .matches\nfunction tryMatches(el, selector) {\n if (!el || !selector) return false;\n try {\n return el.matches(selector);\n } catch (e) {\n return false;\n }\n}\n\nfunction safeClosest(el, selector) {\n if (!el || !selector || !el.closest) return null;\n try {\n return el.closest(selector);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Find component for an element using the ontology\n * @param {HTMLElement} startEl - Starting element to search from\n * @param {Object} options - Search options\n * @param {number} options.maxDepth - Maximum depth to traverse (default: 5)\n * @returns {Object|null} Component info or null\n */\nexport function findComponentForElement(startEl, { maxDepth = 5 } = {}) {\n if (!startEl) return null;\n if (startEl.closest && startEl.closest('.showcase-toc')) return null;\n\n let current = startEl;\n let depth = 0;\n\n while (current && depth < maxDepth) {\n depth++;\n\n // never traverse past the showcase\n if (current.tagName === 'DS-SHOWCASE') return null;\n\n // skip the section wrapper and continue climbing\n if (current.classList && current.classList.contains('showcase-section')) {\n current = current.parentElement;\n continue;\n }\n\n // 1) progressive enhancements\n for (const enh of PDS.ontology.enhancements) {\n const sel = enh.selector || enh;\n if (tryMatches(current, sel)) {\n return { element: current, componentType: 'enhanced-component', displayName: enh.description || sel, id: enh.id };\n }\n }\n\n // 2) Fieldset role groups\n if (current.tagName === 'FIELDSET') {\n const role = current.getAttribute('role');\n if (role === 'group' || role === 'radiogroup') {\n return { element: current, componentType: 'form-group', displayName: role === 'radiogroup' ? 'radio group' : 'form group' };\n }\n }\n\n // 3) label+input\n if (current.tagName === 'LABEL') {\n if (current.querySelector && current.querySelector('input,select,textarea')) {\n return { element: current, componentType: 'form-control', displayName: 'label with input' };\n }\n }\n const labelAncestor = current.closest ? current.closest('label') : null;\n if (labelAncestor && labelAncestor.querySelector && labelAncestor.querySelector('input,select,textarea')) {\n return { element: labelAncestor, componentType: 'form-control', displayName: 'label with input' };\n }\n\n // 4) primitives\n for (const prim of PDS.ontology.primitives) {\n // handle each selector safely, support wildcard class prefix like .icon-*\n for (const sel of prim.selectors || []) {\n const s = String(sel || '').trim();\n\n // Wildcard class prefix handling (e.g., .icon-*)\n if (s.includes('*')) {\n // Only support simple class wildcard like .prefix-*\n if (s.startsWith('.')) {\n const prefix = s.slice(1).replace(/\\*/g, '');\n if (current.classList && Array.from(current.classList).some((c) => c.startsWith(prefix))) {\n return { element: current, componentType: 'pds-primitive', displayName: prim.name || prim.id, id: prim.id, tags: prim.tags };\n }\n // Also try to find an ancestor with such a class (but do not use closest with wildcard)\n let ancestor = current.parentElement;\n let levels = 0;\n while (ancestor && levels < maxDepth) {\n if (ancestor.classList && Array.from(ancestor.classList).some((c) => c.startsWith(prefix)) && ancestor.tagName !== 'DS-SHOWCASE') {\n return { element: ancestor, componentType: 'pds-primitive', displayName: prim.name || prim.id, id: prim.id, tags: prim.tags };\n }\n ancestor = ancestor.parentElement;\n levels++;\n }\n continue;\n }\n // unsupported wildcard pattern - skip\n continue;\n }\n\n // Normal selector: try matches, then safeClosest\n if (tryMatches(current, s)) {\n return { element: current, componentType: 'pds-primitive', displayName: prim.name || prim.id, id: prim.id, tags: prim.tags };\n }\n const ancestor = safeClosest(current, s);\n if (ancestor && ancestor.tagName !== 'DS-SHOWCASE') {\n return { element: ancestor, componentType: 'pds-primitive', displayName: prim.name || prim.id, id: prim.id, tags: prim.tags };\n }\n }\n\n // class prefix fallback for selectors that are like .icon-* written differently\n if (current.classList) {\n const clsList = Array.from(current.classList);\n for (const s of prim.selectors || []) {\n if (typeof s === 'string' && s.includes('*') && s.startsWith('.')) {\n const prefix = s.slice(1).replace(/\\*/g, '');\n if (clsList.some((c) => c.startsWith(prefix))) {\n return { element: current, componentType: 'pds-primitive', displayName: prim.name || prim.id, id: prim.id, tags: prim.tags };\n }\n }\n }\n }\n }\n\n // 4.5) layout patterns - check before going higher in tree\n for (const layout of PDS.ontology.layoutPatterns || []) {\n for (const sel of layout.selectors || []) {\n const s = String(sel || '').trim();\n \n // Wildcard handling for gap-*, items-*, etc.\n if (s.includes('*')) {\n if (s.startsWith('.')) {\n const prefix = s.slice(1).replace(/\\*/g, '');\n if (current.classList && Array.from(current.classList).some((c) => c.startsWith(prefix))) {\n return { element: current, componentType: 'layout-pattern', displayName: layout.name || layout.id, id: layout.id, tags: layout.tags };\n }\n }\n continue;\n }\n \n // Normal selector\n if (tryMatches(current, s)) {\n return { element: current, componentType: 'layout-pattern', displayName: layout.name || layout.id, id: layout.id, tags: layout.tags };\n }\n const ancestor = safeClosest(current, s);\n if (ancestor && ancestor.tagName !== 'DS-SHOWCASE') {\n return { element: ancestor, componentType: 'layout-pattern', displayName: layout.name || layout.id, id: layout.id, tags: layout.tags };\n }\n }\n }\n\n // 5) web components\n if (current.tagName && current.tagName.includes('-')) {\n const tagName = current.tagName.toLowerCase();\n const comp = PDS.ontology.components.find(c => c.selectors.includes(tagName));\n return { \n element: current, \n componentType: 'web-component', \n displayName: comp?.name || tagName,\n id: comp?.id || tagName,\n tags: comp?.tags\n };\n }\n\n // 6) button/icon\n if (current.tagName === 'BUTTON') {\n const hasIcon = current.querySelector && current.querySelector('pds-icon');\n return { element: current, componentType: 'button', displayName: hasIcon ? 'button with icon' : 'button', id: 'button' };\n }\n if (tryMatches(current, 'pds-icon') || (current.closest && current.closest('pds-icon'))) {\n const el = tryMatches(current, 'pds-icon') ? current : current.closest('pds-icon');\n return { element: el, componentType: 'icon', displayName: `pds-icon (${el.getAttribute && el.getAttribute('icon') || 'unknown'})`, id: 'pds-icon' };\n }\n\n // 7) nav dropdown\n if (tryMatches(current, 'nav[data-dropdown]') || (current.closest && current.closest('nav[data-dropdown]'))) {\n const el = tryMatches(current, 'nav[data-dropdown]') ? current : current.closest('nav[data-dropdown]');\n return { element: el, componentType: 'navigation', displayName: 'dropdown menu', id: 'dropdown' };\n }\n\n // climb\n current = current.parentElement;\n }\n\n return null;\n}\n\n/**\n * Get all CSS selectors from the ontology\n * @returns {string[]} Array of all selectors\n */\nexport function getAllSelectors() {\n const s = [];\n for (const p of PDS.ontology.primitives) s.push(...(p.selectors || []));\n for (const c of PDS.ontology.components) s.push(...(c.selectors || []));\n for (const l of PDS.ontology.layoutPatterns || []) s.push(...(l.selectors || []));\n return Array.from(new Set(s));\n}\n\n/**\n * Search the ontology by tag, name, or category\n * @param {string} query - Search term\n * @param {Object} options - Search options\n * @returns {Object[]} Matching items\n */\nexport function searchOntology(query, options = {}) {\n const q = query.toLowerCase();\n const results = [];\n \n const searchIn = (items, type) => {\n for (const item of items) {\n const matches = \n item.id?.toLowerCase().includes(q) ||\n item.name?.toLowerCase().includes(q) ||\n item.description?.toLowerCase().includes(q) ||\n item.tags?.some(t => t.toLowerCase().includes(q)) ||\n item.category?.toLowerCase().includes(q) ||\n item.selectors?.some(s => s.toLowerCase().includes(q));\n \n if (matches) {\n results.push({ ...item, type });\n }\n }\n };\n \n if (!options.type || options.type === 'primitive') {\n searchIn(ontology.primitives, 'primitive');\n }\n if (!options.type || options.type === 'component') {\n searchIn(ontology.components, 'component');\n }\n if (!options.type || options.type === 'layout') {\n searchIn(ontology.layoutPatterns, 'layout');\n }\n if (!options.type || options.type === 'enhancement') {\n searchIn(ontology.enhancements, 'enhancement');\n }\n \n return results;\n}\n\n/**\n * Get items by category\n * @param {string} category - Category name\n * @returns {Object} Items grouped by type\n */\nexport function getByCategory(category) {\n const cat = category.toLowerCase();\n return {\n primitives: ontology.primitives.filter(p => p.category === cat),\n components: ontology.components.filter(c => c.category === cat),\n layouts: ontology.layoutPatterns.filter(l => l.category === cat)\n };\n}\n\n/**\n * Get all available tags\n * @returns {string[]} Sorted unique tags\n */\nexport function getAllTags() {\n const tags = new Set();\n \n ontology.primitives.forEach(p => p.tags?.forEach(t => tags.add(t)));\n ontology.components.forEach(c => c.tags?.forEach(t => tags.add(t)));\n ontology.layoutPatterns.forEach(l => l.tags?.forEach(t => tags.add(t)));\n ontology.enhancements.forEach(e => e.tags?.forEach(t => tags.add(t)));\n \n return Array.from(tags).sort();\n}\n\nexport default ontology;\n", "export function isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function deepMerge(target, source) {\n const output = { ...target };\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target))\n Object.assign(output, { [key]: source[key] });\n else\n output[key] = deepMerge(target[key], source[key]);\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n }\n\n/**\n * Build a DocumentFragment from a template-like object (strings + values)\n * @param {{strings: string[], values: unknown[]}} templateLike\n * @returns {DocumentFragment}\n */\nexport function fragmentFromTemplateLike(templateLike) {\n const strings = Array.isArray(templateLike?.strings) ? templateLike.strings : [];\n const values = Array.isArray(templateLike?.values) ? templateLike.values : [];\n const consumedValues = new Set();\n const htmlParts = [];\n\n const propBindingPattern = /(\\s)(\\.[\\w-]+)=\\s*$/;\n\n for (let i = 0; i < strings.length; i += 1) {\n let chunk = strings[i] ?? \"\";\n const match = chunk.match(propBindingPattern);\n\n if (match && i < values.length) {\n const propToken = match[2];\n const propName = propToken.slice(1);\n const marker = `pds-val-${i}`;\n chunk = chunk.replace(\n propBindingPattern,\n `$1data-pds-prop=\"${propName}:${marker}\"`\n );\n consumedValues.add(i);\n }\n\n htmlParts.push(chunk);\n\n if (i < values.length && !consumedValues.has(i)) {\n htmlParts.push(`<!--pds-val-${i}-->`);\n }\n }\n\n const tpl = document.createElement(\"template\");\n tpl.innerHTML = htmlParts.join(\"\");\n\n const replaceValueAtMarker = (markerNode, value) => {\n const parent = markerNode.parentNode;\n if (!parent) return;\n\n if (value == null) {\n parent.removeChild(markerNode);\n return;\n }\n\n const insertValue = (val) => {\n if (val == null) return;\n if (val instanceof Node) {\n parent.insertBefore(val, markerNode);\n return;\n }\n if (Array.isArray(val)) {\n val.forEach((item) => insertValue(item));\n return;\n }\n parent.insertBefore(document.createTextNode(String(val)), markerNode);\n };\n\n insertValue(value);\n parent.removeChild(markerNode);\n };\n\n const walker = document.createTreeWalker(tpl.content, NodeFilter.SHOW_COMMENT);\n const markers = [];\n while (walker.nextNode()) {\n const node = walker.currentNode;\n if (node?.nodeValue?.startsWith(\"pds-val-\")) {\n markers.push(node);\n }\n }\n\n markers.forEach((node) => {\n const index = Number(node.nodeValue.replace(\"pds-val-\", \"\"));\n replaceValueAtMarker(node, values[index]);\n });\n\n const elements = tpl.content.querySelectorAll(\"*\");\n elements.forEach((el) => {\n const propAttr = el.getAttribute(\"data-pds-prop\");\n if (!propAttr) return;\n const [propName, markerValue] = propAttr.split(\":\");\n const index = Number(String(markerValue).replace(\"pds-val-\", \"\"));\n if (propName && Number.isInteger(index)) {\n el[propName] = values[index];\n }\n el.removeAttribute(\"data-pds-prop\");\n });\n\n return tpl.content;\n}\n\n/**\n * Parses an HTML string into a NodeList\n * @param {String} html\n * @returns {NodeListOf<ChildNode>}\n */\nexport function parseHTML(html) {\n return new DOMParser().parseFromString(html, \"text/html\").body.childNodes;\n}", "import { enums } from \"./pds-enums.js\";\n\n/**\n * Design config types (SSoT) - mirror generator input and document output impact.\n * These types are used for validation and live-edit mapping.\n */\n\n/**\n * @typedef {Object} PDSDarkModeColorsConfig\n * @property {string} [background] - Affects dark surface palette and smart surface tokens.\n * @property {string} [primary] - Affects --color-dark-primary-* and interactive dark fills.\n * @property {string} [secondary] - Affects --color-dark-gray-* and dark borders/text.\n * @property {string} [accent] - Affects --color-dark-accent-* and accent interactions.\n */\n\n/**\n * @typedef {Object} PDSColorsConfig\n * @property {string} [primary] - Drives primary scale: --color-primary-50..900 and interactive tokens.\n * @property {string} [secondary] - Drives neutral scale: --color-gray-50..900.\n * @property {string} [accent] - Drives accent scale: --color-accent-50..900.\n * @property {string} [background] - Drives surface shades: --color-surface-* and smart surfaces.\n * @property {string | null} [success] - Drives semantic success scale and role tokens: --color-success-*, --color-success-fill/text/*, and --surface-*-success-text.\n * @property {string | null} [warning] - Drives semantic warning scale and role tokens: --color-warning-*, --color-warning-fill/text/*, and --surface-*-warning-text.\n * @property {string | null} [danger] - Drives semantic danger scale and role tokens: --color-danger-*, --color-danger-fill/text/*, and --surface-*-danger-text.\n * @property {string | null} [info] - Drives semantic info scale and role tokens: --color-info-*, --color-info-fill/text/*, and --surface-*-info-text.\n * @property {number} [gradientStops] - Affects generated gradient scales.\n * @property {number} [elevationOpacity] - Affects smart surface shadows (opacity).\n * @property {PDSDarkModeColorsConfig} [darkMode] - Overrides dark mode palette generation.\n */\n\n/**\n * @typedef {Object} PDSTypographyConfig\n * @property {string} [fontFamilyHeadings] - Affects --font-family-headings and heading styles.\n * @property {string} [fontFamilyBody] - Affects --font-family-body and body text.\n * @property {string} [fontFamilyMono] - Affects --font-family-mono and code styling.\n * @property {number} [baseFontSize] - Sets base scale for --font-size-*.\n * @property {number} [fontScale] - Controls modular scale for --font-size-*.\n * @property {string | number} [fontWeightLight] - Affects --font-weight-light.\n * @property {string | number} [fontWeightNormal] - Affects --font-weight-normal.\n * @property {string | number} [fontWeightMedium] - Affects --font-weight-medium.\n * @property {string | number} [fontWeightSemibold] - Affects --font-weight-semibold.\n * @property {string | number} [fontWeightBold] - Affects --font-weight-bold.\n * @property {string | number} [lineHeightTight] - Affects --line-height-tight.\n * @property {string | number} [lineHeightNormal] - Affects --line-height-normal.\n * @property {string | number} [lineHeightRelaxed] - Affects --line-height-relaxed.\n * @property {number} [letterSpacingTight] - Affects --letter-spacing-tight.\n * @property {number} [letterSpacingNormal] - Affects --letter-spacing-normal.\n * @property {number} [letterSpacingWide] - Affects --letter-spacing-wide.\n */\n\n/**\n * @typedef {Object} PDSSpatialRhythmConfig\n * @property {number} [baseUnit] - Generates spacing scale --spacing-1..N.\n * @property {number} [scaleRatio] - Reserved for derived spacing systems.\n * @property {number} [maxSpacingSteps] - Caps spacing tokens output.\n * @property {number} [containerPadding] - Affects container padding tokens.\n * @property {number} [inputPadding] - Affects input padding tokens.\n * @property {number} [buttonPadding] - Affects button padding tokens.\n * @property {number} [sectionSpacing] - Affects section spacing tokens.\n */\n\n/**\n * @typedef {Object} PDSShapeConfig\n * @property {string | number} [radiusSize] - Drives --radius-* scale.\n * @property {string | number | null} [customRadius] - Overrides radius scale base.\n * @property {string | number} [borderWidth] - Drives --border-width-* scale.\n */\n\n/**\n * @typedef {Object} PDSBehaviorConfig\n * @property {string | number} [transitionSpeed] - Drives --transition-* durations.\n * @property {string} [animationEasing] - Drives --ease-* tokens.\n * @property {number | null} [customTransitionSpeed] - Overrides transition durations.\n * @property {string | null} [customEasing] - Overrides easing curve.\n * @property {number} [focusRingWidth] - Affects focus ring thickness.\n * @property {number} [focusRingOpacity] - Affects focus ring opacity.\n * @property {number} [hoverOpacity] - Affects hover overlay opacity.\n */\n\n/**\n * @typedef {Object} PDSLayoutConfig\n * @property {number | string} [maxWidth] - Drives layout max width tokens.\n * @property {{ sm?: number | string, md?: number | string, lg?: number | string, xl?: number | string }} [maxWidths] - Per-breakpoint max widths.\n * @property {number | string} [containerPadding] - Drives layout container padding token.\n * @property {{ sm?: number, md?: number, lg?: number, xl?: number }} [breakpoints] - Drives breakpoint tokens.\n * @property {number} [gridColumns] - Affects grid utilities.\n * @property {number} [gridGutter] - Affects grid gap utilities.\n * @property {number} [densityCompact] - Affects density tokens/utilities.\n * @property {number} [densityNormal] - Affects density tokens/utilities.\n * @property {number} [densityComfortable] - Affects density tokens/utilities.\n * @property {number} [buttonMinHeight] - Affects min-height tokens for buttons.\n * @property {number} [inputMinHeight] - Affects min-height tokens for inputs.\n * @property {number} [baseShadowOpacity] - Affects layout shadow opacity.\n * @property {{ baseShadowOpacity?: number }} [darkMode] - Dark mode shadow opacity overrides.\n * @property {Record<string, any>} [utilities] - Toggles layout utilities generation.\n * @property {Record<string, any>} [gridSystem] - Grid system configuration.\n * @property {number | string} [containerMaxWidth] - Affects container sizing token.\n */\n\n/**\n * @typedef {Object} PDSLayersConfig\n * @property {number} [baseShadowOpacity] - Drives --shadow-* opacity.\n * @property {number} [shadowBlurMultiplier] - Scales shadow blur.\n * @property {number} [shadowOffsetMultiplier] - Scales shadow offsets.\n * @property {string} [shadowDepth] - Base depth style selection.\n * @property {number} [blurLight] - Affects blur tokens.\n * @property {number} [blurMedium] - Affects blur tokens.\n * @property {number} [blurHeavy] - Affects blur tokens.\n * @property {number} [baseZIndex] - Drives z-index token base.\n * @property {number} [zIndexStep] - Drives z-index step scale.\n * @property {number} [zIndexBase]\n * @property {number} [zIndexDropdown]\n * @property {number} [zIndexSticky]\n * @property {number} [zIndexFixed]\n * @property {number} [zIndexModal]\n * @property {number} [zIndexPopover]\n * @property {number} [zIndexTooltip]\n * @property {number} [zIndexNotification]\n * @property {{ baseShadowOpacity?: number }} [darkMode] - Dark mode shadow opacity overrides.\n */\n\n/**\n * @typedef {Object} PDSIconsConfig\n * @property {string} [set] - Icon set name, affects icon resolution.\n * @property {string} [weight] - Default icon weight.\n * @property {number} [defaultSize] - Default icon size token.\n * @property {Record<string, number | string>} [sizes] - Icon size scale tokens.\n * @property {string} [spritePath] - Sprite URL used by icon component.\n * @property {string} [externalPath] - External icon path for on-demand icons.\n * @property {Record<string, string[]>} [include] - Icon allowlist for build.\n */\n\n/**\n * @typedef {Object} PDSEnhancer\n * @property {string} selector\n * @property {string} [description]\n * @property {(element: Element) => void} run\n */\n\n/**\n * @typedef {Object} PDSAutoDefineConfig\n * @property {string[]} [predefine]\n * @property {(tag: string) => (string | undefined | null)} [mapper]\n * @property {PDSEnhancer[]} [enhancers]\n * @property {boolean} [scanExisting]\n * @property {boolean} [observeShadows]\n * @property {boolean} [patchAttachShadow]\n * @property {number} [debounceMs]\n * @property {(error: any) => void} [onError]\n */\n\n/**\n * @typedef {Object} PDSDesignOptionsConfig\n * @property {boolean} [liquidGlassEffects]\n * @property {number} [backgroundMesh]\n */\n\n/**\n * @typedef {Object} PDSFormOptionsWidgetsConfig\n * @property {\"toggle\"|\"toggle-with-icons\"|\"checkbox\"} [booleans]\n * @property {\"input\"|\"range\"} [numbers]\n * @property {\"standard\"|\"dropdown\"} [selects]\n */\n\n/**\n * @typedef {Object} PDSFormOptionsLayoutsConfig\n * @property {\"default\"|\"flex\"|\"grid\"|\"accordion\"|\"tabs\"|\"card\"} [fieldsets]\n * @property {\"default\"|\"compact\"} [arrays]\n */\n\n/**\n * @typedef {Object} PDSFormOptionsEnhancementsConfig\n * @property {boolean} [icons]\n * @property {boolean} [datalists]\n * @property {boolean} [rangeOutput]\n * @property {boolean} [colorInput]\n */\n\n/**\n * @typedef {Object} PDSFormOptionsValidationConfig\n * @property {boolean} [showErrors]\n * @property {boolean} [validateOnChange]\n */\n\n/**\n * @typedef {Object} PDSFormOptionsConfig\n * @property {PDSFormOptionsWidgetsConfig} [widgets]\n * @property {PDSFormOptionsLayoutsConfig} [layouts]\n * @property {PDSFormOptionsEnhancementsConfig} [enhancements]\n * @property {PDSFormOptionsValidationConfig} [validation]\n */\n\n/**\n * @typedef {Object} PDSFormConfig\n * @property {PDSFormOptionsConfig} [options]\n */\n\n/**\n * @typedef {Object} PDSAdvancedConfig\n * @property {string} [linkStyle]\n * @property {string} [colorDerivation]\n */\n\n/**\n * @typedef {Object} PDSA11yConfig\n * @property {string | number} [minTouchTarget]\n * @property {boolean} [prefersReducedMotion]\n * @property {string} [focusStyle]\n */\n\n/**\n * @typedef {Object} PDSConfigEditorFieldMetadata\n * @property {string} [label]\n * @property {string} [description]\n * @property {string} [widget]\n * @property {string} [icon]\n * @property {number} [min]\n * @property {number} [max]\n * @property {number} [step]\n * @property {string[]} [enum]\n * @property {string} [placeholder]\n * @property {number} [maxLength]\n * @property {number} [rows]\n * @property {Record<string, any>} [options]\n */\n\n/**\n * @typedef {Object} PDSDesignConfig\n * @property {string} [id]\n * @property {string} [name]\n * @property {string[]} [tags]\n * @property {string[]} [themes]\n * @property {string} [description]\n * @property {PDSDesignOptionsConfig} [options]\n * @property {PDSFormConfig} [form]\n * @property {PDSColorsConfig} [colors] - Affects tokens.colors and --color-* variables.\n * @property {PDSTypographyConfig} [typography] - Affects tokens.typography and --font-* variables.\n * @property {PDSSpatialRhythmConfig} [spatialRhythm] - Affects tokens.spacing and --spacing-* variables.\n * @property {PDSShapeConfig} [shape] - Affects tokens.radius/borderWidths and --radius-* variables.\n * @property {PDSBehaviorConfig} [behavior] - Affects tokens.transitions and motion variables.\n * @property {PDSLayoutConfig} [layout] - Affects tokens.layout and layout utilities.\n * @property {PDSLayersConfig} [layers] - Affects tokens.shadows/zIndex and layer effects.\n * @property {PDSAdvancedConfig} [advanced]\n * @property {PDSA11yConfig} [a11y]\n * @property {PDSIconsConfig} [icons] - Affects tokens.icons and icon component behavior.\n * @property {Record<string, any>} [components]\n * @property {boolean} [debug]\n */\n\n/**\n * @typedef {Object} PDSLocalizationProvider\n * @property {(context: { key: string, values: any[], options?: Record<string, any>, locale: string, defaultLocale: string, messages: Record<string, string>, messagesByLocale?: Record<string, Record<string, string>>, template?: { strings: string[], values: any[] } | null }) => (string | undefined | null)} [translate]\n * @property {(context: { locale: string, defaultLocale: string, reason?: string, loadedLocales?: string[], messages?: Record<string, string>, load?: boolean }) => (Promise<Record<string, string | { content?: string }>> | Record<string, string | { content?: string }> | void)} [loadLocale]\n * @property {(context: { locale: string, defaultLocale: string, reason?: string, loadedLocales?: string[], messages?: Record<string, string>, load?: boolean }) => (Promise<Record<string, string | { content?: string }>> | Record<string, string | { content?: string }> | void)} [setLocale]\n */\n\n/**\n * @typedef {Object} PDSLocalizationConfig\n * @property {string} [locale]\n * @property {string[]} [locales]\n * @property {Record<string, string | { content?: string }>} [messages]\n * @property {PDSLocalizationProvider} [provider]\n * @property {PDSLocalizationProvider[\"translate\"]} [translate]\n * @property {PDSLocalizationProvider[\"loadLocale\"]} [loadLocale]\n * @property {PDSLocalizationProvider[\"setLocale\"]} [setLocale]\n */\n\n/**\n * @typedef {Object} PDSInitConfig\n * @property {string} [mode]\n * @property {string} [preset]\n * @property {PDSDesignConfig} [design]\n * @property {PDSEnhancer[] | Record<string, PDSEnhancer>} [enhancers]\n * @property {boolean} [applyGlobalStyles]\n * @property {boolean} [manageTheme]\n * @property {string} [themeStorageKey]\n * @property {boolean} [preloadStyles]\n * @property {string[]} [criticalLayers]\n * @property {PDSAutoDefineConfig} [autoDefine]\n * @property {string} [managerURL]\n * @property {any} [manager]\n * @property {boolean} [liveEdit]\n * @property {PDSLocalizationConfig} [localization]\n * @property {any} [log]\n */\n\nconst __ANY_TYPE__ = \"any\";\n\nconst __DESIGN_CONFIG_SPEC__ = {\n type: \"object\",\n allowUnknown: false,\n properties: {\n id: { type: \"string\", minLength: 1, maxLength: 64 },\n name: { type: \"string\", minLength: 1, maxLength: 80 },\n tags: { type: \"array\", uniqueItems: true, items: { type: \"string\" } },\n themes: {\n type: \"array\",\n uniqueItems: true,\n items: {\n type: \"string\",\n oneOf: [\n { const: \"light\", title: \"Light\" },\n { const: \"dark\", title: \"Dark\" },\n { const: \"system\", title: \"System\" },\n ],\n },\n },\n description: { type: \"string\", maxLength: 500 },\n options: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n liquidGlassEffects: { type: \"boolean\" },\n backgroundMesh: { type: \"number\" },\n },\n },\n form: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n options: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n widgets: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n booleans: { type: \"string\" },\n numbers: { type: \"string\" },\n selects: { type: \"string\" },\n },\n },\n layouts: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n fieldsets: { type: \"string\" },\n arrays: { type: \"string\" },\n },\n },\n enhancements: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n icons: { type: \"boolean\" },\n datalists: { type: \"boolean\" },\n rangeOutput: { type: \"boolean\" },\n colorInput: { type: \"boolean\" },\n },\n },\n validation: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n showErrors: { type: \"boolean\" },\n validateOnChange: { type: \"boolean\" },\n },\n },\n },\n },\n },\n },\n colors: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n primary: {\n type: \"string\",\n relations: {\n tokens: [\n \"--color-primary-*\",\n \"--color-primary-fill\",\n \"--color-primary-text\",\n \"--background-mesh-*\",\n ],\n },\n },\n secondary: {\n type: \"string\",\n relations: {\n tokens: [\"--color-secondary-*\", \"--color-gray-*\", \"--background-mesh-*\"]\n },\n },\n accent: {\n type: \"string\",\n relations: {\n tokens: [\"--color-accent-*\", \"--background-mesh-*\"]\n },\n },\n background: {\n type: \"string\",\n relations: {\n tokens: [\n \"--color-surface-*\",\n \"--color-surface-translucent-*\",\n \"--surface-*-bg\",\n \"--surface-*-text\",\n \"--surface-*-text-secondary\",\n \"--surface-*-text-muted\",\n \"--surface-*-icon\",\n \"--surface-*-icon-subtle\",\n \"--surface-*-shadow\",\n \"--surface-*-border\",\n ],\n },\n },\n success: {\n type: [\"string\", \"null\"],\n relations: {\n tokens: [\n \"--color-success-*\",\n \"--color-success-fill\",\n \"--color-success-fill-hover\",\n \"--color-success-fill-active\",\n \"--color-success-text\",\n \"--color-success-text-hover\",\n \"--color-success-contrast\",\n \"--color-success-display-*\",\n \"--surface-*-success-text\",\n \"--surface-*-success-text-hover\",\n ],\n },\n },\n warning: {\n type: [\"string\", \"null\"],\n relations: {\n tokens: [\n \"--color-warning-*\",\n \"--color-warning-fill\",\n \"--color-warning-fill-hover\",\n \"--color-warning-fill-active\",\n \"--color-warning-text\",\n \"--color-warning-text-hover\",\n \"--color-warning-contrast\",\n \"--color-warning-display-*\",\n \"--surface-*-warning-text\",\n \"--surface-*-warning-text-hover\",\n ],\n },\n },\n danger: {\n type: [\"string\", \"null\"],\n relations: {\n tokens: [\n \"--color-danger-*\",\n \"--color-danger-fill\",\n \"--color-danger-fill-hover\",\n \"--color-danger-fill-active\",\n \"--color-danger-text\",\n \"--color-danger-text-hover\",\n \"--color-danger-contrast\",\n \"--color-danger-display-*\",\n \"--surface-*-danger-text\",\n \"--surface-*-danger-text-hover\",\n ],\n },\n },\n info: {\n type: [\"string\", \"null\"],\n relations: {\n tokens: [\n \"--color-info-*\",\n \"--color-info-fill\",\n \"--color-info-fill-hover\",\n \"--color-info-fill-active\",\n \"--color-info-text\",\n \"--color-info-text-hover\",\n \"--color-info-contrast\",\n \"--color-info-display-*\",\n \"--surface-*-info-text\",\n \"--surface-*-info-text-hover\",\n ],\n },\n },\n gradientStops: { type: \"number\" },\n elevationOpacity: {\n type: \"number\",\n relations: { tokens: [\"--surface-*-shadow\"] },\n },\n darkMode: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n background: {\n type: \"string\",\n relations: {\n theme: \"dark\",\n tokens: [\n \"--color-surface-*\",\n \"--color-surface-translucent-*\",\n \"--surface-*-bg\",\n \"--surface-*-text\",\n \"--surface-*-text-secondary\",\n \"--surface-*-text-muted\",\n \"--surface-*-icon\",\n \"--surface-*-icon-subtle\",\n \"--surface-*-shadow\",\n \"--surface-*-border\",\n ],\n },\n },\n primary: {\n type: \"string\",\n relations: {\n theme: \"dark\",\n tokens: [\"--color-primary-*\", \"--color-primary-fill\", \"--color-primary-text\"],\n },\n },\n secondary: {\n type: \"string\",\n relations: {\n theme: \"dark\",\n tokens: [\"--color-secondary-*\", \"--color-gray-*\"]\n },\n },\n accent: {\n type: \"string\",\n relations: { theme: \"dark\", tokens: [\"--color-accent-*\"] },\n },\n },\n },\n },\n },\n typography: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n fontFamilyHeadings: {\n type: \"string\",\n relations: { tokens: [\"--font-family-headings\"] },\n },\n fontFamilyBody: {\n type: \"string\",\n relations: { tokens: [\"--font-family-body\"] },\n },\n fontFamilyMono: {\n type: \"string\",\n relations: { tokens: [\"--font-family-mono\"] },\n },\n baseFontSize: {\n type: \"number\",\n relations: { tokens: [\"--font-size-*\"] },\n },\n fontScale: {\n type: \"number\",\n relations: { tokens: [\"--font-size-*\"] },\n },\n fontWeightLight: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-weight-light\"] },\n },\n fontWeightNormal: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-weight-normal\"] },\n },\n fontWeightMedium: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-weight-medium\"] },\n },\n fontWeightSemibold: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-weight-semibold\"] },\n },\n fontWeightBold: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-weight-bold\"] },\n },\n lineHeightTight: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-line-height-tight\"] },\n },\n lineHeightNormal: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-line-height-normal\"] },\n },\n lineHeightRelaxed: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--font-line-height-relaxed\"] },\n },\n letterSpacingTight: { type: \"number\" },\n letterSpacingNormal: { type: \"number\" },\n letterSpacingWide: { type: \"number\" },\n },\n },\n spatialRhythm: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n baseUnit: {\n type: \"number\",\n relations: { tokens: [\"--spacing-*\"] },\n },\n scaleRatio: { type: \"number\" },\n maxSpacingSteps: {\n type: \"number\",\n relations: { tokens: [\"--spacing-*\"] },\n },\n containerPadding: { type: \"number\" },\n inputPadding: {\n type: \"number\",\n relations: {\n rules: [{ selectors: [\"input\", \"textarea\", \"select\"], properties: [\"padding\"] }],\n },\n },\n buttonPadding: {\n type: \"number\",\n relations: {\n rules: [{ selectors: [\"button\", \".btn\"], properties: [\"padding\"] }],\n },\n },\n sectionSpacing: {\n type: \"number\",\n relations: {\n rules: [{ selectors: [\"section\"], properties: [\"margin\", \"padding\"] }],\n },\n },\n },\n },\n shape: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n radiusSize: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--radius-*\"] },\n },\n customRadius: { type: [\"string\", \"number\", \"null\"] },\n borderWidth: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--border-width-*\"] },\n },\n },\n },\n behavior: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n transitionSpeed: {\n type: [\"string\", \"number\"],\n relations: { tokens: [\"--transition-*\"] },\n },\n animationEasing: { type: \"string\" },\n customTransitionSpeed: { type: [\"number\", \"null\"] },\n customEasing: { type: [\"string\", \"null\"] },\n focusRingWidth: {\n type: \"number\",\n relations: { rules: [{ selectors: [\":focus-visible\"], properties: [\"outline-width\", \"box-shadow\"] }] },\n },\n focusRingOpacity: {\n type: \"number\",\n relations: { rules: [{ selectors: [\":focus-visible\"], properties: [\"box-shadow\", \"outline-color\"] }] },\n },\n hoverOpacity: { type: \"number\" },\n },\n },\n layout: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n maxWidth: {\n type: [\"number\", \"string\"],\n relations: { tokens: [\"--layout-max-width\", \"--layout-max-width-*\"] },\n },\n maxWidths: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n sm: { type: [\"number\", \"string\"], relations: { tokens: [\"--layout-max-width-sm\"] } },\n md: { type: [\"number\", \"string\"], relations: { tokens: [\"--layout-max-width-md\"] } },\n lg: { type: [\"number\", \"string\"], relations: { tokens: [\"--layout-max-width-lg\"] } },\n xl: { type: [\"number\", \"string\"], relations: { tokens: [\"--layout-max-width-xl\"] } },\n },\n },\n containerPadding: {\n type: [\"number\", \"string\"],\n relations: { tokens: [\"--layout-container-padding\"] },\n },\n breakpoints: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n sm: { type: \"number\" },\n md: { type: \"number\" },\n lg: { type: \"number\" },\n xl: { type: \"number\" },\n },\n },\n gridColumns: { type: \"number\" },\n gridGutter: { type: \"number\" },\n densityCompact: { type: \"number\" },\n densityNormal: { type: \"number\" },\n densityComfortable: { type: \"number\" },\n buttonMinHeight: { type: \"number\" },\n inputMinHeight: { type: \"number\" },\n baseShadowOpacity: {\n type: \"number\",\n relations: { tokens: [\"--shadow-*\"] },\n },\n darkMode: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n baseShadowOpacity: { type: \"number\", relations: { theme: \"dark\", tokens: [\"--shadow-*\"] } },\n },\n },\n utilities: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n grid: { type: \"boolean\" },\n flex: { type: \"boolean\" },\n spacing: { type: \"boolean\" },\n container: { type: \"boolean\" },\n },\n },\n gridSystem: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n columns: { type: \"array\", items: { type: \"number\" } },\n autoFitBreakpoints: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n sm: { type: \"string\" },\n md: { type: \"string\" },\n lg: { type: \"string\" },\n xl: { type: \"string\" },\n },\n },\n enableGapUtilities: { type: \"boolean\" },\n },\n },\n containerMaxWidth: { type: [\"number\", \"string\"] },\n },\n },\n layers: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n baseShadowOpacity: {\n type: \"number\",\n relations: { tokens: [\"--shadow-*\"] },\n },\n shadowBlurMultiplier: {\n type: \"number\",\n relations: { tokens: [\"--shadow-*\"] },\n },\n shadowOffsetMultiplier: {\n type: \"number\",\n relations: { tokens: [\"--shadow-*\"] },\n },\n shadowDepth: { type: \"string\" },\n blurLight: { type: \"number\" },\n blurMedium: { type: \"number\" },\n blurHeavy: { type: \"number\" },\n baseZIndex: { type: \"number\", relations: { tokens: [\"--z-*\"] } },\n zIndexStep: { type: \"number\", relations: { tokens: [\"--z-*\"] } },\n zIndexBase: { type: \"number\" },\n zIndexDropdown: { type: \"number\" },\n zIndexSticky: { type: \"number\" },\n zIndexFixed: { type: \"number\" },\n zIndexModal: { type: \"number\" },\n zIndexPopover: { type: \"number\" },\n zIndexTooltip: { type: \"number\" },\n zIndexNotification: { type: \"number\" },\n darkMode: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n baseShadowOpacity: { type: \"number\", relations: { theme: \"dark\", tokens: [\"--shadow-*\"] } },\n },\n },\n },\n },\n advanced: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n linkStyle: { type: \"string\" },\n colorDerivation: { type: \"string\" },\n },\n },\n a11y: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n minTouchTarget: { type: [\"string\", \"number\"] },\n prefersReducedMotion: { type: \"boolean\" },\n focusStyle: { type: \"string\" },\n },\n },\n icons: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n set: { type: \"string\" },\n weight: { type: \"string\" },\n defaultSize: { type: \"number\", relations: { tokens: [\"--icon-size\"] } },\n sizes: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n xs: { type: [\"number\", \"string\"] },\n sm: { type: [\"number\", \"string\"] },\n md: { type: [\"number\", \"string\"] },\n lg: { type: [\"number\", \"string\"] },\n xl: { type: [\"number\", \"string\"] },\n \"2xl\": { type: [\"number\", \"string\"] },\n },\n },\n spritePath: { type: \"string\" },\n externalPath: { type: \"string\" },\n include: {\n type: \"object\",\n allowUnknown: true,\n properties: {\n navigation: { type: \"array\", items: { type: \"string\" } },\n actions: { type: \"array\", items: { type: \"string\" } },\n communication: { type: \"array\", items: { type: \"string\" } },\n content: { type: \"array\", items: { type: \"string\" } },\n status: { type: \"array\", items: { type: \"string\" } },\n time: { type: \"array\", items: { type: \"string\" } },\n commerce: { type: \"array\", items: { type: \"string\" } },\n formatting: { type: \"array\", items: { type: \"string\" } },\n system: { type: \"array\", items: { type: \"string\" } },\n },\n },\n },\n },\n components: { type: \"object\", allowUnknown: true },\n debug: { type: \"boolean\" },\n },\n};\n\nconst __INIT_CONFIG_SPEC__ = {\n type: \"object\",\n allowUnknown: true,\n properties: {\n mode: { type: \"string\" },\n preset: { type: \"string\" },\n design: __DESIGN_CONFIG_SPEC__,\n enhancers: { type: [\"object\", \"array\"] },\n applyGlobalStyles: { type: \"boolean\" },\n manageTheme: { type: \"boolean\" },\n themeStorageKey: { type: \"string\" },\n preloadStyles: { type: \"boolean\" },\n criticalLayers: { type: \"array\", items: { type: \"string\" } },\n autoDefine: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n predefine: { type: \"array\", items: { type: \"string\" } },\n mapper: { type: __ANY_TYPE__ },\n enhancers: { type: [\"object\", \"array\"] },\n scanExisting: { type: \"boolean\" },\n observeShadows: { type: \"boolean\" },\n patchAttachShadow: { type: \"boolean\" },\n debounceMs: { type: \"number\" },\n onError: { type: __ANY_TYPE__ },\n baseURL: { type: \"string\" },\n },\n },\n managerURL: { type: \"string\" },\n manager: { type: __ANY_TYPE__ },\n liveEdit: { type: \"boolean\" },\n localization: {\n type: \"object\",\n allowUnknown: false,\n properties: {\n locale: { type: \"string\" },\n locales: { type: \"array\", items: { type: \"string\" } },\n messages: { type: \"object\", allowUnknown: true },\n provider: { type: __ANY_TYPE__ },\n translate: { type: __ANY_TYPE__ },\n loadLocale: { type: __ANY_TYPE__ },\n setLocale: { type: __ANY_TYPE__ },\n },\n },\n log: { type: __ANY_TYPE__ },\n },\n};\n\nfunction __getValueType(value) {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n}\n\nfunction __matchesExpectedType(value, expected) {\n if (expected === __ANY_TYPE__) return true;\n const actual = __getValueType(value);\n if (Array.isArray(expected)) {\n return expected.includes(actual);\n }\n return actual === expected;\n}\n\nfunction __validateAgainstSpec(value, spec, path, issues) {\n if (!spec) return;\n const expectedType = spec.type || __ANY_TYPE__;\n if (!__matchesExpectedType(value, expectedType)) {\n issues.push({\n path,\n expected: expectedType,\n actual: __getValueType(value),\n message: `Expected ${expectedType} but got ${__getValueType(value)}`,\n });\n return;\n }\n\n if (expectedType === \"array\" && spec.items && Array.isArray(value)) {\n value.forEach((item, index) => {\n __validateAgainstSpec(item, spec.items, `${path}[${index}]`, issues);\n });\n }\n\n if (expectedType === \"object\" && value && typeof value === \"object\") {\n const props = spec.properties || {};\n for (const [key, val] of Object.entries(value)) {\n if (!Object.prototype.hasOwnProperty.call(props, key)) {\n if (!spec.allowUnknown) {\n issues.push({\n path: `${path}.${key}`,\n expected: \"known property\",\n actual: \"unknown\",\n message: `Unknown property \"${key}\"`,\n });\n }\n continue;\n }\n __validateAgainstSpec(val, props[key], `${path}.${key}`, issues);\n }\n }\n}\n\nfunction __collectRelations(spec, basePath = \"\", out = {}) {\n if (!spec || typeof spec !== \"object\") return out;\n if (spec.relations && basePath) {\n out[basePath] = spec.relations;\n }\n\n if (spec.type === \"object\" && spec.properties) {\n Object.entries(spec.properties).forEach(([key, value]) => {\n const nextPath = basePath ? `${basePath}.${key}` : key;\n __collectRelations(value, nextPath, out);\n });\n }\n\n if (spec.type === \"array\" && spec.items) {\n const nextPath = `${basePath}[]`;\n __collectRelations(spec.items, nextPath, out);\n }\n\n return out;\n}\n\n/**\n * Machine-readable config relations for live editing.\n * Keys are design config paths (e.g., \"colors.accent\").\n */\nexport const PDS_CONFIG_RELATIONS = __collectRelations(\n __DESIGN_CONFIG_SPEC__,\n \"\"\n);\n\nexport const PDS_DESIGN_CONFIG_SPEC = __DESIGN_CONFIG_SPEC__;\n\nconst __CONFIG_EDITOR_METADATA_OVERRIDES__ = {\n \"colors.primary\": { widget: \"input-color\" },\n \"colors.secondary\": { widget: \"input-color\" },\n \"colors.accent\": { widget: \"input-color\" },\n \"colors.background\": { widget: \"input-color\" },\n \"colors.success\": { widget: \"input-color\" },\n \"colors.warning\": { widget: \"input-color\" },\n \"colors.danger\": { widget: \"input-color\" },\n \"colors.info\": { widget: \"input-color\" },\n \"colors.gradientStops\": { min: 2, max: 8, step: 1, widget: \"range\" },\n \"colors.elevationOpacity\": { min: 0, max: 1, step: 0.01, widget: \"range\" },\n \"colors.darkMode.background\": { widget: \"input-color\" },\n \"colors.darkMode.primary\": { widget: \"input-color\" },\n \"colors.darkMode.secondary\": { widget: \"input-color\" },\n \"colors.darkMode.accent\": { widget: \"input-color\" },\n\n \"description\": {\n widget: \"textarea\",\n maxLength: 500,\n rows: 4,\n placeholder: \"Summarize the visual and interaction intent\",\n },\n\n \"typography.fontFamilyHeadings\": {\n widget: \"font-family-omnibox\",\n icon: \"text-aa\",\n placeholder: \"Heading font stack\",\n },\n \"typography.fontFamilyBody\": {\n widget: \"font-family-omnibox\",\n icon: \"text-aa\",\n placeholder: \"Body font stack\",\n },\n \"typography.fontFamilyMono\": {\n widget: \"font-family-omnibox\",\n icon: \"text-aa\",\n placeholder: \"Monospace font stack\",\n },\n \"typography.baseFontSize\": { min: 8, max: 32, step: 1, widget: \"input-range\" },\n \"typography.fontScale\": { min: 1, max: 2, step: 0.01, widget: \"range\" },\n \"typography.fontWeightLight\": { min: 100, max: 800, step: 100, widget: \"input-range\" },\n \"typography.fontWeightNormal\": { min: 100, max: 800, step: 100, widget: \"input-range\" },\n \"typography.fontWeightMedium\": { min: 100, max: 800, step: 100, widget: \"input-range\" },\n \"typography.fontWeightSemibold\": { min: 100, max: 800, step: 100, widget: \"input-range\" },\n \"typography.fontWeightBold\": { min: 100, max: 800, step: 100, widget: \"input-range\" },\n \"typography.lineHeightTight\": { min: 0.75, max: 3, step: 0.001, widget: \"input-range\" },\n \"typography.lineHeightNormal\": { min: 0.75, max: 3, step: 0.001, widget: \"input-range\" },\n \"typography.lineHeightRelaxed\": { min: 0.75, max: 3, step: 0.001, widget: \"input-range\" },\n \"typography.letterSpacingTight\": { min: -0.1, max: 0.1, step: 0.001, widget: \"range\" },\n \"typography.letterSpacingNormal\": { min: -0.1, max: 0.1, step: 0.001, widget: \"range\" },\n \"typography.letterSpacingWide\": { min: -0.1, max: 0.1, step: 0.001, widget: \"range\" },\n\n \"spatialRhythm.baseUnit\": { min: 1, max: 16, step: 1, widget: \"range\" },\n \"spatialRhythm.scaleRatio\": { min: 1, max: 2, step: 0.01, widget: \"range\" },\n \"spatialRhythm.maxSpacingSteps\": { min: 4, max: 64, step: 1, widget: \"range\" },\n \"spatialRhythm.containerPadding\": { min: 0, max: 8, step: 0.05, widget: \"range\" },\n \"spatialRhythm.inputPadding\": { min: 0, max: 4, step: 0.05, widget: \"range\" },\n \"spatialRhythm.buttonPadding\": { min: 0, max: 4, step: 0.05, widget: \"range\" },\n \"spatialRhythm.sectionSpacing\": { min: 0, max: 8, step: 0.05, widget: \"range\" },\n\n \"shape.radiusSize\": {\n oneOf: Object.entries(enums.RadiusSizes).map(([name, value]) => ({\n const: value,\n title: name,\n })),\n },\n \"shape.borderWidth\": {\n widget: \"select\",\n oneOf: Object.entries(enums.BorderWidths).map(([name, value]) => ({\n const: value,\n title: name,\n })),\n },\n \"shape.customRadius\": { min: 0, max: 64, step: 1, widget: \"range\" },\n\n \"behavior.transitionSpeed\": {\n oneOf: Object.entries(enums.TransitionSpeeds).map(([name, value]) => ({\n const: value,\n title: name,\n })),\n },\n \"behavior.animationEasing\": {\n enum: Object.values(enums.AnimationEasings),\n },\n \"behavior.customTransitionSpeed\": { min: 0, max: 1000, step: 10, widget: \"range\" },\n \"behavior.focusRingWidth\": { min: 0, max: 8, step: 1, widget: \"range\" },\n \"behavior.focusRingOpacity\": { min: 0, max: 1, step: 0.01, widget: \"range\" },\n \"behavior.hoverOpacity\": { min: 0, max: 1, step: 0.01, widget: \"range\" },\n\n \"layout.gridColumns\": { min: 1, max: 24, step: 1, widget: \"range\" },\n \"layout.gridGutter\": { min: 0, max: 8, step: 0.05, widget: \"range\" },\n \"layout.maxWidth\": { widget: \"input-text\", placeholder: \"e.g. 1200 or 1200px\" },\n \"layout.maxWidths.sm\": { widget: \"input-text\", placeholder: \"e.g. 640 or 640px\" },\n \"layout.maxWidths.md\": { widget: \"input-text\", placeholder: \"e.g. 768 or 768px\" },\n \"layout.maxWidths.lg\": { widget: \"input-text\", placeholder: \"e.g. 1024 or 1024px\" },\n \"layout.maxWidths.xl\": { widget: \"input-text\", placeholder: \"e.g. 1280 or 1280px\" },\n \"layout.containerMaxWidth\": { widget: \"input-text\", placeholder: \"e.g. 1400px\" },\n \"layout.containerPadding\": { widget: \"input-text\", placeholder: \"e.g. var(--spacing-6)\" },\n \"layout.breakpoints.sm\": { min: 320, max: 2560, step: 1, widget: \"input-number\" },\n \"layout.breakpoints.md\": { min: 480, max: 3200, step: 1, widget: \"input-number\" },\n \"layout.breakpoints.lg\": { min: 640, max: 3840, step: 1, widget: \"input-number\" },\n \"layout.breakpoints.xl\": { min: 768, max: 5120, step: 1, widget: \"input-number\" },\n \"layout.baseShadowOpacity\": { min: 0, max: 1, step: 0.01, widget: \"range\" },\n \"layout.darkMode.baseShadowOpacity\": { min: 0, max: 1, step: 0.01, widget: \"range\" },\n \"layout.densityCompact\": { min: 0.5, max: 2, step: 0.05, widget: \"range\" },\n \"layout.densityNormal\": { min: 0.5, max: 2, step: 0.05, widget: \"range\" },\n \"layout.densityComfortable\": { min: 0.5, max: 2, step: 0.05, widget: \"range\" },\n \"layout.buttonMinHeight\": { min: 24, max: 96, step: 1, widget: \"range\" },\n \"layout.inputMinHeight\": { min: 24, max: 96, step: 1, widget: \"range\" },\n\n \"layers.baseShadowOpacity\": { min: 0, max: 1, step: 0.01, widget: \"range\" },\n \"layers.shadowBlurMultiplier\": { min: 0, max: 8, step: 0.1, widget: \"range\" },\n \"layers.shadowOffsetMultiplier\": { min: 0, max: 8, step: 0.1, widget: \"range\" },\n \"layers.blurLight\": { min: 0, max: 48, step: 1, widget: \"range\" },\n \"layers.blurMedium\": { min: 0, max: 64, step: 1, widget: \"range\" },\n \"layers.blurHeavy\": { min: 0, max: 96, step: 1, widget: \"range\" },\n \"layers.baseZIndex\": { min: 0, max: 10000, step: 10, widget: \"range\" },\n \"layers.zIndexStep\": { min: 1, max: 100, step: 1, widget: \"range\" },\n \"layers.darkMode.baseShadowOpacity\": { min: 0, max: 1, step: 0.01, widget: \"range\" },\n\n \"advanced.linkStyle\": { enum: Object.values(enums.LinkStyles) },\n \"a11y.minTouchTarget\": {\n oneOf: Object.entries(enums.TouchTargetSizes).map(([name, value]) => ({\n const: value,\n title: name,\n })),\n },\n \"a11y.focusStyle\": { enum: Object.values(enums.FocusStyles) },\n\n \"icons.defaultSize\": { min: 8, max: 128, step: 1, widget: \"range\", icon: \"sparkle\" },\n};\n\nfunction __toConfigPath(pathSegments = []) {\n return pathSegments.join(\".\");\n}\n\nfunction __toJsonPointer(pathSegments = []) {\n return `/${pathSegments.join(\"/\")}`;\n}\n\nfunction __getValueAtPath(source, pathSegments = []) {\n if (!source || typeof source !== \"object\") return undefined;\n return pathSegments.reduce((current, segment) => {\n if (current === null || current === undefined) return undefined;\n if (typeof current !== \"object\") return undefined;\n return current[segment];\n }, source);\n}\n\nfunction __resolveExampleValue(value, fallbackSource, pathSegments = []) {\n if (value !== undefined && value !== null) return value;\n const fallback = __getValueAtPath(fallbackSource, pathSegments);\n return fallback !== undefined && fallback !== null ? fallback : undefined;\n}\n\nfunction __toTitleCase(value = \"\") {\n return String(value)\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/^./, (char) => char.toUpperCase());\n}\n\nfunction __resolveExpectedType(spec, value) {\n if (!spec) return \"string\";\n const expected = spec.type || \"string\";\n if (Array.isArray(expected)) {\n const actual = __getValueType(value);\n if (actual !== \"undefined\" && expected.includes(actual)) return actual;\n if (expected.includes(\"string\")) return \"string\";\n return expected.find((item) => item !== \"null\") || expected[0] || \"string\";\n }\n return expected;\n}\n\nfunction __copySchemaConstraints(target, spec, keys = []) {\n if (!target || !spec || !Array.isArray(keys)) return target;\n keys.forEach((key) => {\n if (spec[key] !== undefined) {\n target[key] = spec[key];\n }\n });\n return target;\n}\n\nfunction __buildSchemaChoices(spec, metadata) {\n if (Array.isArray(metadata?.oneOf) && metadata.oneOf.length) {\n return metadata.oneOf;\n }\n if (Array.isArray(metadata?.enum) && metadata.enum.length) {\n return metadata.enum.map((option) => ({\n const: option,\n title: __toTitleCase(option),\n }));\n }\n if (Array.isArray(spec?.oneOf) && spec.oneOf.length) {\n return spec.oneOf;\n }\n if (Array.isArray(spec?.enum) && spec.enum.length) {\n return spec.enum.map((option) => ({\n const: option,\n title: __toTitleCase(option),\n }));\n }\n return null;\n}\n\nfunction __normalizeEditorWidget(widget) {\n if (!widget) return widget;\n if (widget === \"range\") return \"input-range\";\n return widget;\n}\n\nfunction __resolveSchemaTypeFromChoices(schemaType, choices) {\n if (!Array.isArray(choices) || !choices.length) return schemaType;\n const choiceTypes = new Set();\n for (const option of choices) {\n if (!option || option.const === undefined) continue;\n choiceTypes.add(__getValueType(option.const));\n }\n if (!choiceTypes.size) return schemaType;\n if (choiceTypes.size === 1) {\n const only = Array.from(choiceTypes)[0];\n if (only === \"number\") return \"number\";\n if (only === \"string\") return \"string\";\n if (only === \"boolean\") return \"boolean\";\n }\n return schemaType;\n}\n\nfunction __inferEditorMetadata(path, spec, value) {\n const type = __resolveExpectedType(spec, value);\n const lowerPath = path.toLowerCase();\n const base = {\n label: __toTitleCase(path.split(\".\").slice(-1)[0] || path),\n };\n\n if (type === \"boolean\") {\n base.widget = \"toggle\";\n }\n\n if (type === \"number\") {\n base.widget = \"range\";\n if (lowerPath.includes(\"opacity\")) {\n base.min = 0;\n base.max = 1;\n base.step = 0.01;\n } else if (lowerPath.includes(\"lineheight\")) {\n base.min = 0.75;\n base.max = 3;\n base.step = 0.001;\n base.widget = \"input-range\";\n } else if (lowerPath.includes(\"fontweight\")) {\n base.min = 100;\n base.max = 800;\n base.step = 100;\n base.widget = \"input-range\";\n } else if (lowerPath.endsWith(\"basefontsize\")) {\n base.min = 8;\n base.max = 32;\n base.step = 1;\n base.widget = \"input-range\";\n } else if (lowerPath.includes(\"scale\") || lowerPath.includes(\"ratio\")) {\n base.min = 1;\n base.max = 2;\n base.step = 0.01;\n } else {\n base.min = 0;\n base.max = Math.max(10, Number.isFinite(Number(value)) ? Number(value) * 4 : 100);\n base.step = 1;\n }\n }\n\n if (type === \"string\" && path.startsWith(\"colors.\")) {\n base.widget = \"input-color\";\n }\n\n if (type === \"string\" && lowerPath === \"description\") {\n base.widget = \"textarea\";\n base.maxLength = 500;\n base.rows = 4;\n }\n\n const override = __CONFIG_EDITOR_METADATA_OVERRIDES__[path] || {};\n const merged = { ...base, ...override };\n if (merged.widget) {\n merged.widget = __normalizeEditorWidget(merged.widget);\n }\n return merged;\n}\n\nfunction __buildConfigSchemaNode(\n spec,\n value,\n pathSegments,\n uiSchema,\n metadataOut,\n fallbackSource\n) {\n if (!spec || typeof spec !== \"object\") return null;\n const resolvedValueForType = __resolveExampleValue(\n value,\n fallbackSource,\n pathSegments\n );\n const expectedType = __resolveExpectedType(spec, resolvedValueForType);\n\n if (expectedType === \"object\" && spec.properties) {\n const schemaNode = { type: \"object\", properties: {} };\n if (pathSegments.length > 0) {\n schemaNode.title = __toTitleCase(pathSegments[pathSegments.length - 1]);\n }\n const valueNode = {};\n for (const [key, childSpec] of Object.entries(spec.properties)) {\n const childValue =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? value[key]\n : undefined;\n const child = __buildConfigSchemaNode(\n childSpec,\n childValue,\n [...pathSegments, key],\n uiSchema,\n metadataOut,\n fallbackSource\n );\n if (!child) continue;\n schemaNode.properties[key] = child.schema;\n if (child.hasValue) {\n valueNode[key] = child.value;\n }\n }\n if (!Object.keys(schemaNode.properties).length) return null;\n return {\n schema: schemaNode,\n value: valueNode,\n hasValue: Object.keys(valueNode).length > 0,\n };\n }\n\n if (expectedType === \"array\") {\n const path = __toConfigPath(pathSegments);\n const metadata = __inferEditorMetadata(path, spec, value);\n metadataOut[path] = metadata;\n const resolvedArrayExample = __resolveExampleValue(\n value,\n fallbackSource,\n pathSegments\n );\n\n const itemType = spec.items?.type || \"string\";\n const normalizedItemType = Array.isArray(itemType) ? itemType[0] : itemType;\n const itemSchema = {\n type: normalizedItemType,\n };\n\n const itemChoices = __buildSchemaChoices(spec?.items, null);\n if (itemChoices) {\n itemSchema.oneOf = itemChoices;\n }\n\n if (\n normalizedItemType === \"string\" &&\n Array.isArray(resolvedArrayExample) &&\n resolvedArrayExample.length > 0\n ) {\n const firstString = resolvedArrayExample.find(\n (entry) => typeof entry === \"string\" && entry.trim().length > 0\n );\n if (firstString) {\n itemSchema.examples = [firstString];\n }\n }\n\n __copySchemaConstraints(itemSchema, spec?.items, [\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"multipleOf\",\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"description\",\n \"default\",\n ]);\n\n const schemaNode = {\n type: \"array\",\n items: itemSchema,\n };\n\n __copySchemaConstraints(schemaNode, spec, [\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"description\",\n \"default\",\n ]);\n\n const pointer = __toJsonPointer(pathSegments);\n const uiEntry = {};\n const itemHasChoices = Array.isArray(itemSchema.oneOf) && itemSchema.oneOf.length > 0;\n if (normalizedItemType === \"string\" && itemHasChoices) {\n uiEntry[\"ui:widget\"] = schemaNode.maxItems === 1 ? \"radio\" : \"checkbox-group\";\n }\n if (\n normalizedItemType === \"string\" &&\n Array.isArray(resolvedArrayExample) &&\n resolvedArrayExample.length > 0\n ) {\n const placeholderPreview = resolvedArrayExample\n .filter((entry) => typeof entry === \"string\" && entry.trim().length > 0)\n .slice(0, 5)\n .join(\", \");\n if (placeholderPreview) {\n uiEntry[\"ui:placeholder\"] = placeholderPreview;\n }\n }\n if (Object.keys(uiEntry).length) {\n uiSchema[pointer] = {\n ...(uiSchema[pointer] || {}),\n ...uiEntry,\n };\n }\n\n return {\n schema: schemaNode,\n value: Array.isArray(value) ? value : [],\n hasValue: Array.isArray(value),\n };\n }\n\n const path = __toConfigPath(pathSegments);\n const metadata = __inferEditorMetadata(path, spec, resolvedValueForType);\n metadataOut[path] = metadata;\n\n const choices = __buildSchemaChoices(spec, metadata);\n const schemaType = expectedType === \"null\" ? \"string\" : expectedType;\n const normalizedSchemaType = __resolveSchemaTypeFromChoices(schemaType, choices);\n const schemaNode = {\n type: normalizedSchemaType,\n title: metadata.label || __toTitleCase(pathSegments[pathSegments.length - 1] || path),\n };\n\n if (choices) {\n schemaNode.oneOf = choices;\n }\n\n __copySchemaConstraints(schemaNode, spec, [\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"multipleOf\",\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n \"description\",\n \"default\",\n ]);\n\n if (typeof metadata.maxLength === \"number\" && schemaNode.maxLength === undefined) {\n schemaNode.maxLength = metadata.maxLength;\n }\n\n if (\n (schemaNode.type === \"number\" || schemaNode.type === \"integer\") &&\n typeof metadata.min === \"number\" &&\n schemaNode.minimum === undefined\n ) {\n schemaNode.minimum = metadata.min;\n }\n if (\n (schemaNode.type === \"number\" || schemaNode.type === \"integer\") &&\n typeof metadata.max === \"number\" &&\n schemaNode.maximum === undefined\n ) {\n schemaNode.maximum = metadata.max;\n }\n if (\n (schemaNode.type === \"number\" || schemaNode.type === \"integer\") &&\n typeof metadata.step === \"number\" &&\n schemaNode.multipleOf === undefined\n ) {\n schemaNode.multipleOf = metadata.step;\n }\n\n const exampleValue = resolvedValueForType;\n if (exampleValue !== undefined) {\n schemaNode.examples = [exampleValue];\n }\n\n const pointer = __toJsonPointer(pathSegments);\n const uiEntry = {};\n if (metadata.widget) uiEntry[\"ui:widget\"] = metadata.widget;\n if (metadata.icon) uiEntry[\"ui:icon\"] = metadata.icon;\n if (typeof metadata.min === \"number\") uiEntry[\"ui:min\"] = metadata.min;\n if (typeof metadata.max === \"number\") uiEntry[\"ui:max\"] = metadata.max;\n if (typeof metadata.step === \"number\") uiEntry[\"ui:step\"] = metadata.step;\n if (metadata.placeholder) uiEntry[\"ui:placeholder\"] = metadata.placeholder;\n if (typeof metadata.rows === \"number\") {\n uiEntry[\"ui:options\"] = {\n ...(uiEntry[\"ui:options\"] || {}),\n rows: metadata.rows,\n };\n }\n if (\n metadata.widget === \"input-range\" &&\n exampleValue !== undefined\n ) {\n uiEntry[\"ui:allowUnset\"] = true;\n }\n if (\n typeof metadata.min === \"number\" ||\n typeof metadata.max === \"number\" ||\n typeof metadata.step === \"number\"\n ) {\n uiEntry[\"ui:options\"] = {\n ...(uiEntry[\"ui:options\"] || {}),\n ...(typeof metadata.min === \"number\" ? { min: metadata.min } : {}),\n ...(typeof metadata.max === \"number\" ? { max: metadata.max } : {}),\n ...(typeof metadata.step === \"number\" ? { step: metadata.step } : {}),\n };\n }\n if (Object.keys(uiEntry).length) {\n uiSchema[pointer] = uiEntry;\n }\n\n return {\n schema: schemaNode,\n value,\n hasValue: value !== undefined,\n };\n}\n\nexport function buildDesignConfigFormSchema(designConfig = {}) {\n const metadata = {};\n const uiSchema = {\n \"/colors\": {\n \"ui:layout\": \"flex\",\n \"ui:layoutOptions\": { wrap: true, gap: \"sm\" },\n },\n \"/colors/darkMode\": {\n \"ui:layout\": \"flex\",\n \"ui:layoutOptions\": { wrap: true, gap: \"sm\" },\n },\n };\n\n const fallbackSource = presets?.default && typeof presets.default === \"object\"\n ? presets.default\n : null;\n\n const root = __buildConfigSchemaNode(\n __DESIGN_CONFIG_SPEC__,\n designConfig,\n [],\n uiSchema,\n metadata,\n fallbackSource\n );\n\n return {\n schema: root?.schema || { type: \"object\", properties: {} },\n uiSchema,\n values: root?.value || {},\n metadata,\n };\n}\n\nexport function getDesignConfigEditorMetadata(designConfig = {}) {\n return buildDesignConfigFormSchema(designConfig).metadata;\n}\n\nexport function validateDesignConfig(designConfig, { log, context = \"PDS config\" } = {}) {\n if (!designConfig || typeof designConfig !== \"object\") return [];\n const issues = [];\n __validateAgainstSpec(designConfig, __DESIGN_CONFIG_SPEC__, \"design\", issues);\n if (issues.length && typeof log === \"function\") {\n issues.forEach((issue) => {\n log(\"warn\", `[${context}] ${issue.message} at ${issue.path}`);\n });\n }\n return issues;\n}\n\nexport function validateInitConfig(initConfig, { log, context = \"PDS config\" } = {}) {\n if (!initConfig || typeof initConfig !== \"object\") return [];\n const issues = [];\n __validateAgainstSpec(initConfig, __INIT_CONFIG_SPEC__, \"config\", issues);\n if (issues.length && typeof log === \"function\") {\n issues.forEach((issue) => {\n log(\"warn\", `[${context}] ${issue.message} at ${issue.path}`);\n });\n }\n return issues;\n}\n\n/**\n * Design system presets - pre-configured themes for quick starts.\n * Expose as an object keyed by preset id.\n */\nexport const presets = {\n \"ocean-breeze\": {\n id: \"ocean-breeze\",\n name: \"Ocean Breeze\",\n tags: [\"playful\"],\n description:\n \"Fresh and calming ocean-inspired palette with professional undertones\",\n options: {\n liquidGlassEffects: true,\n backgroundMesh: 3,\n },\n colors: {\n primary: \"#0891b2\",\n secondary: \"#64748b\",\n accent: \"#06b6d4\",\n background: \"#f0f9ff\",\n darkMode: {\n background: \"#0c1821\",\n secondary: \"#94a3b8\",\n primary: \"#0891b2\", // cyan-600 as base - generates darker 600 shade\n },\n },\n typography: {\n baseFontSize: 17,\n fontScale: 1.35, // More dramatic scale for breathing room\n fontFamilyHeadings:\n 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n fontFamilyBody:\n 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n },\n spatialRhythm: {\n baseUnit: 6, // More spacious\n scaleRatio: 1.2,\n },\n shape: {\n radiusSize: enums.RadiusSizes.xxlarge, // Soft, flowing\n },\n },\n \"midnight-steel\": {\n id: \"midnight-steel\",\n name: \"Midnight Steel\",\n description:\n \"Bold industrial aesthetic with sharp contrasts and urban edge\",\n colors: {\n primary: \"#3b82f6\",\n secondary: \"#52525b\",\n accent: \"#f59e0b\",\n background: \"#fafaf9\",\n darkMode: {\n background: \"#18181b\",\n secondary: \"#71717a\",\n primary: \"#3b82f6\", // blue-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.333,\n fontFamilyHeadings:\n \"'IBM Plex Sans', system-ui, -apple-system, sans-serif\",\n fontFamilyBody: \"'Inter', system-ui, -apple-system, sans-serif\",\n fontWeightSemibold: 600,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n },\n shape: {\n radiusSize: enums.RadiusSizes.small, // Crisp corporate edges\n borderWidth: enums.BorderWidths.thin,\n },\n },\n \"neural-glow\": {\n id: \"neural-glow\",\n name: \"Neural Glow\",\n description:\n \"AI-inspired with vibrant purple-blue gradients and futuristic vibes\",\n colors: {\n primary: \"#8b5cf6\",\n secondary: \"#6366f1\",\n accent: \"#ec4899\",\n background: \"#faf5ff\",\n darkMode: {\n background: \"#0f0a1a\",\n secondary: \"#818cf8\",\n primary: \"#8b5cf6\", // violet-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.318, // Golden ratio for futuristic feel\n fontFamilyHeadings: \"'Space Grotesk', system-ui, sans-serif\",\n fontFamilyBody: \"'Space Grotesk', system-ui, sans-serif\",\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.5,\n },\n shape: {\n radiusSize: enums.RadiusSizes.xlarge, // Smooth, modern\n borderWidth: enums.BorderWidths.medium,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.fast,\n },\n },\n \"paper-and-ink\": {\n id: \"paper-and-ink\",\n name: \"Paper & Ink\",\n tags: [\"app\", \"featured\"],\n themes: [\"light\"], // Not optimized for dark mode \n description: \"Ultra-minimal design with focus on typography and whitespace\",\n colors: {\n primary: \"#171717\",\n secondary: \"#737373\",\n accent: \"#525252\",\n background: \"#ffffff\",\n darkMode: {\n background: \"#0a0a0a\",\n secondary: \"#a3a3a3\",\n primary: \"#737373\", // gray-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 18, // Readable, print-like\n fontScale: 1.333, // Perfect fourth\n fontFamilyHeadings: \"'Helvetica Neue', 'Arial', sans-serif\",\n fontFamilyBody: \"'Georgia', 'Times New Roman', serif\",\n fontWeightNormal: 400,\n fontWeightBold: 700,\n },\n spatialRhythm: {\n baseUnit: 4, // Tight, compact\n scaleRatio: 1.2,\n },\n shape: {\n radiusSize: enums.RadiusSizes.none, // Sharp editorial\n borderWidth: enums.BorderWidths.thin,\n },\n },\n \"sunset-paradise\": {\n id: \"sunset-paradise\",\n name: \"Sunset Paradise\",\n description: \"Warm tropical colors evoking golden hour by the beach\",\n options: {\n liquidGlassEffects: true,\n backgroundMesh: 2,\n },\n colors: {\n primary: \"#ea580c\", // Darker orange for better light mode contrast\n secondary: \"#d4a373\",\n accent: \"#fb923c\",\n background: \"#fffbeb\",\n darkMode: {\n background: \"#1a0f0a\",\n secondary: \"#c9a482\",\n // Ensure sufficient contrast for primary-filled components with white text in dark mode\n primary: \"#f97316\", // orange-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.3,\n fontFamilyHeadings: \"'Quicksand', 'Comfortaa', sans-serif\",\n fontFamilyBody: \"'Quicksand', 'Comfortaa', sans-serif\",\n },\n spatialRhythm: {\n baseUnit: 6, // Relaxed, vacation vibes\n scaleRatio: 1.5,\n },\n shape: {\n radiusSize: enums.RadiusSizes.xxlarge, // Playful, rounded\n borderWidth: enums.BorderWidths.medium,\n },\n },\n \"retro-wave\": {\n id: \"retro-wave\",\n name: \"Retro Wave\",\n description: \"Nostalgic 80s-inspired palette with neon undertones\",\n colors: {\n primary: \"#c026d3\", // Darker fuchsia for better light mode contrast\n secondary: \"#a78bfa\",\n accent: \"#22d3ee\",\n background: \"#fef3ff\",\n darkMode: {\n background: \"#1a0a1f\",\n secondary: \"#c4b5fd\",\n // Deepen primary for dark mode to meet AA contrast with white text\n primary: \"#d946ef\", // fuchsia-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 15,\n fontScale: 1.5,\n fontFamilyHeadings: \"'Orbitron', 'Impact', monospace\",\n fontFamilyBody: \"'Courier New', 'Courier', monospace\",\n fontWeightBold: 700,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n },\n shape: {\n radiusSize: enums.RadiusSizes.none, // Sharp geometric 80s\n borderWidth: enums.BorderWidths.thick, // Bold borders\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.instant, // Snappy retro feel\n },\n },\n \"forest-canopy\": {\n id: \"forest-canopy\",\n name: \"Forest Canopy\",\n description: \"Natural earth tones with organic, calming green hues\",\n colors: {\n primary: \"#059669\",\n secondary: \"#78716c\",\n accent: \"#84cc16\",\n background: \"#f0fdf4\",\n darkMode: {\n background: \"#0a1410\",\n secondary: \"#a8a29e\",\n primary: \"#10b981\", // emerald-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.414, // Square root of 2, organic growth\n fontFamilyHeadings: \"'Merriweather Sans', 'Arial', sans-serif\",\n fontFamilyBody: \"'Merriweather', 'Georgia', serif\",\n },\n spatialRhythm: {\n baseUnit: 6,\n scaleRatio: 1.3,\n },\n shape: {\n radiusSize: enums.RadiusSizes.medium, // Natural, organic curves\n borderWidth: enums.BorderWidths.thin,\n },\n },\n \"ruby-elegance\": {\n id: \"ruby-elegance\",\n name: \"Ruby Elegance\",\n description: \"Sophisticated palette with rich ruby reds and warm accents\",\n colors: {\n primary: \"#dc2626\",\n secondary: \"#9ca3af\",\n accent: \"#be123c\",\n background: \"#fef2f2\",\n darkMode: {\n background: \"#1b0808\",\n secondary: \"#d1d5db\",\n primary: \"#ef4444\", // red-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 17,\n fontScale: 1.3,\n fontFamilyHeadings: \"'Playfair Display', 'Georgia', serif\",\n fontFamilyBody: \"'Crimson Text', 'Garamond', serif\",\n fontWeightNormal: 400,\n fontWeightSemibold: 600,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.3,\n },\n shape: {\n radiusSize: enums.RadiusSizes.small, // Subtle elegance\n borderWidth: enums.BorderWidths.thin,\n },\n },\n \"desert-dawn\": {\n id: \"desert-dawn\",\n name: \"Desert Dawn\",\n description:\n \"Sun-baked neutrals with grounded terracotta and cool oasis accents\",\n colors: {\n primary: \"#b45309\", // terracotta\n secondary: \"#a8a29e\", // warm gray\n accent: \"#0ea5a8\", // oasis teal\n background: \"#fcf6ef\",\n darkMode: {\n background: \"#12100e\",\n secondary: \"#d1d5db\",\n // Deepen primary in dark to keep white text AA-compliant\n primary: \"#f59e0b\", // amber-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.414,\n fontFamilyHeadings:\n \"'Source Sans Pro', system-ui, -apple-system, sans-serif\",\n fontFamilyBody: \"'Source Serif Pro', Georgia, serif\",\n },\n spatialRhythm: {\n baseUnit: 6,\n scaleRatio: 1.3,\n },\n shape: {\n radiusSize: enums.RadiusSizes.medium,\n borderWidth: enums.BorderWidths.medium,\n },\n },\n \"contrast-pro\": {\n id: \"contrast-pro\",\n name: \"Contrast Pro\",\n description: \"Accessibility-first, high-contrast UI with assertive clarity\",\n colors: {\n primary: \"#1f2937\", // slate-800\n secondary: \"#111827\", // gray-900\n accent: \"#eab308\", // amber-500\n background: \"#ffffff\",\n darkMode: {\n background: \"#0b0f14\",\n secondary: \"#9ca3af\",\n // Use a lighter primary in dark mode to ensure outline/link text\n // has strong contrast against the very-dark surface. The generator\n // will still pick appropriate darker fill shades for buttons so\n // white-on-fill contrast is preserved.\n primary: \"#9ca3af\", // gray-400 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 17,\n fontScale: 1.2,\n fontFamilyHeadings:\n \"system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\",\n fontFamilyBody:\n \"system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\",\n fontWeightBold: 700,\n },\n spatialRhythm: {\n baseUnit: 3, // compact, data-dense\n scaleRatio: 1.2,\n },\n shape: {\n radiusSize: enums.RadiusSizes.small,\n borderWidth: enums.BorderWidths.thick,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.fast,\n focusRingWidth: 4,\n },\n },\n \"pastel-play\": {\n id: \"pastel-play\",\n name: \"Pastel Play\",\n themes: [\"light\"], // Not optimized for dark mode due to pastel contrast challenges\n description:\n \"Playful pastels with soft surfaces and friendly rounded shapes\",\n colors: {\n primary: \"#db2777\", // raspberry\n secondary: \"#a78bfa\", // lavender\n accent: \"#34d399\", // mint\n background: \"#fff7fa\",\n darkMode: {\n background: \"#1a1016\",\n secondary: \"#c4b5fd\",\n primary: \"#ec4899\", // pink-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.333,\n fontFamilyHeadings: \"'Nunito', system-ui, -apple-system, sans-serif\",\n fontFamilyBody: \"'Nunito', system-ui, -apple-system, sans-serif\",\n lineHeightRelaxed: enums.LineHeights.relaxed,\n },\n spatialRhythm: {\n baseUnit: 6, // comfy\n scaleRatio: 1.4,\n },\n shape: {\n radiusSize: enums.RadiusSizes.xxlarge,\n borderWidth: enums.BorderWidths.thin,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.slow,\n animationEasing: enums.AnimationEasings[\"ease-out\"],\n },\n },\n \"brutalist-tech\": {\n id: \"brutalist-tech\",\n name: \"Brutalist Tech\",\n description:\n \"Stark grayscale with engineered accents and unapologetically bold structure\",\n colors: {\n primary: \"#111111\",\n secondary: \"#4b5563\",\n accent: \"#06b6d4\", // cyan signal\n background: \"#f8fafc\",\n darkMode: {\n background: \"#0c0c0c\",\n secondary: \"#9ca3af\",\n // Set a chromatic primary in dark mode to ensure both:\n // - outline/link contrast on dark surface, and\n // - sufficient button fill contrast against white text.\n // Cyan signal aligns with preset accent and produces high-contrast dark fills.\n primary: \"#06b6d4\", // cyan-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 15,\n fontScale: 1.25,\n fontFamilyHeadings:\n \"'JetBrains Mono', ui-monospace, Menlo, Consolas, monospace\",\n fontFamilyBody: \"'Inter', system-ui, -apple-system, sans-serif\",\n letterSpacingTight: -0.02,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n },\n shape: {\n radiusSize: enums.RadiusSizes.none,\n borderWidth: enums.BorderWidths.thick,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.instant,\n },\n },\n \"zen-garden\": {\n id: \"zen-garden\",\n name: \"Zen Garden\",\n description:\n \"Soft botanicals with contemplative spacing and balanced motion\",\n colors: {\n primary: \"#3f6212\", // deep olive\n secondary: \"#6b7280\", // neutral leaf shadow\n accent: \"#7c3aed\", // iris bloom\n background: \"#f7fbef\",\n darkMode: {\n background: \"#0d130a\",\n secondary: \"#a3a3a3\",\n primary: \"#84cc16\", // lime-500 - optimized mid-tone\n },\n },\n typography: {\n baseFontSize: 17,\n fontScale: 1.35,\n fontFamilyHeadings: \"'Merriweather', Georgia, serif\",\n fontFamilyBody: \"'Noto Sans', system-ui, -apple-system, sans-serif\",\n },\n spatialRhythm: {\n baseUnit: 6, // airy\n scaleRatio: 1.35,\n },\n shape: {\n radiusSize: enums.RadiusSizes.large,\n borderWidth: enums.BorderWidths.medium,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.normal,\n animationEasing: enums.AnimationEasings.ease,\n },\n },\n \"fitness-pro\": {\n id: \"fitness-pro\",\n name: \"Fitness Pro\",\n tags: [\"app\", \"featured\"],\n description:\n \"Health and fitness tracking aesthetic with data-driven dark surfaces and vibrant accent rings\",\n options: {\n liquidGlassEffects: true,\n backgroundMesh: 2,\n },\n colors: {\n primary: \"#e91e63\", // vibrant pink-magenta for data highlights\n secondary: \"#78909c\", // cool gray for secondary data\n accent: \"#ab47bc\", // purple accent for premium features\n background: \"#fafafa\",\n darkMode: {\n background: \"#1a1d21\", // deep charcoal like WHOOP\n secondary: \"#78909c\",\n //primary: \"#0a4ca4\",\n },\n },\n typography: {\n baseFontSize: 15,\n fontScale: 1.25,\n fontFamilyHeadings:\n \"'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontFamilyBody:\n \"'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n lineHeightNormal: enums.LineHeights.tight,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n containerPadding: 1.25,\n sectionSpacing: 2.5,\n },\n shape: {\n radiusSize: enums.RadiusSizes.large, // smooth cards and buttons\n borderWidth: enums.BorderWidths.thin,\n },\n layers: {\n shadowDepth: \"medium\",\n blurMedium: 12,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.fast,\n animationEasing: enums.AnimationEasings[\"ease-out\"],\n focusRingWidth: 2,\n },\n },\n \"travel-market\": {\n id: \"travel-market\",\n name: \"Travel Market\",\n description:\n \"Hospitality marketplace design with clean cards, subtle shadows, and trust-building neutrals\",\n options: {\n liquidGlassEffects: true,\n backgroundMesh: 3,\n },\n colors: {\n primary: \"#d93251\", // Darker coral red for better contrast (was #ff385c)\n secondary: \"#717171\", // neutral gray for text\n accent: \"#144990\", // teal for experiences/verified\n background: \"#ffffff\",\n darkMode: {\n background: \"#222222\",\n secondary: \"#b0b0b0\",\n primary: \"#ff5a7a\", // Lighter for dark mode\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.2,\n fontFamilyHeadings:\n \"'Circular', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontFamilyBody:\n \"'Circular', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n lineHeightRelaxed: enums.LineHeights.relaxed,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n containerPadding: 1.5,\n sectionSpacing: 3.0,\n },\n shape: {\n radiusSize: enums.RadiusSizes.medium,\n borderWidth: enums.BorderWidths.thin,\n },\n layers: {\n shadowDepth: \"light\",\n blurLight: 8,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.normal,\n animationEasing: enums.AnimationEasings[\"ease-in-out\"],\n hoverOpacity: 0.9,\n },\n },\n \"mobility-app\": {\n id: \"mobility-app\",\n name: \"Mobility App\",\n tags: [\"app\", \"featured\"],\n description:\n \"On-demand service platform with bold typography, map-ready colors, and action-driven UI\",\n options: {\n liquidGlassEffects: true,\n backgroundMesh: 0,\n },\n colors: {\n primary: \"#000000\", // Uber-inspired black for trust and sophistication\n secondary: \"#545454\", // mid-gray for secondary elements\n accent: \"#06c167\", // green for success/confirmation\n info: \"#0e7490\", // explicit semantic info hue so info-50 remains a subtle tint\n background: \"#f6f6f6\",\n darkMode: {\n background: \"#0f0f0f\",\n secondary: \"#8a8a8a\",\n primary: \"#b1b1b1\"\n //primary: \"#06c167\", // Use bright green for dark mode buttons (was white)\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.3,\n fontFamilyHeadings:\n \"'UberMove', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontFamilyBody:\n \"'UberMove', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n buttonPadding: 1.25,\n inputPadding: 1.0,\n },\n shape: {\n radiusSize: enums.RadiusSizes.small, // subtle, professional\n borderWidth: enums.BorderWidths.medium,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.fast,\n animationEasing: enums.AnimationEasings[\"ease-out\"],\n focusRingWidth: 3,\n },\n a11y: {\n minTouchTarget: enums.TouchTargetSizes.comfortable,\n focusStyle: enums.FocusStyles.ring,\n },\n },\n \"fintech-secure\": {\n id: \"fintech-secure\",\n name: \"Fintech Secure\",\n description:\n \"Financial services app UI with trust-building blues, precise spacing, and security-first design\",\n options: {\n liquidGlassEffects: false,\n backgroundMesh: 0,\n },\n colors: {\n primary: \"#0a2540\", // deep navy for trust and security\n secondary: \"#425466\", // slate for secondary content\n accent: \"#00d4ff\", // bright cyan for CTAs\n background: \"#f7fafc\",\n darkMode: {\n background: \"#0a1929\",\n secondary: \"#8796a5\",\n primary: \"#00d4ff\",\n },\n },\n typography: {\n baseFontSize: 16,\n fontScale: 1.25,\n fontFamilyHeadings:\n \"'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontFamilyBody:\n \"'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontFamilyMono:\n \"'JetBrains Mono', ui-monospace, 'Cascadia Code', monospace\",\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n sectionSpacing: 2.5,\n },\n shape: {\n radiusSize: enums.RadiusSizes.medium,\n borderWidth: enums.BorderWidths.thin,\n },\n layers: {\n shadowDepth: \"light\",\n blurLight: 6,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.fast,\n animationEasing: enums.AnimationEasings[\"ease-in-out\"],\n focusRingWidth: 3,\n focusRingOpacity: 0.4,\n },\n a11y: {\n minTouchTarget: enums.TouchTargetSizes.standard,\n focusStyle: enums.FocusStyles.ring,\n },\n },\n \"social-feed\": {\n id: \"social-feed\",\n name: \"Social Feed\",\n tags: [\"app\", \"featured\"],\n description:\n \"Content-first social platform with minimal chrome, bold actions, and vibrant media presentation\",\n options: {\n liquidGlassEffects: true,\n backgroundMesh: 4,\n },\n colors: {\n primary: \"#1877f2\", // social blue for links and primary actions\n secondary: \"#65676b\", // neutral gray for secondary text\n accent: \"#fe2c55\", // vibrant pink-red for likes/hearts\n background: \"#ffffff\",\n darkMode: {\n background: \"#18191a\",\n secondary: \"#b0b3b8\",\n primary: \"#2d88ff\",\n },\n },\n typography: {\n baseFontSize: 15,\n fontScale: 1.2,\n fontFamilyHeadings:\n \"system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\",\n fontFamilyBody:\n \"system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif\",\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n lineHeightNormal: enums.LineHeights.relaxed,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.25,\n sectionSpacing: 1.5,\n },\n shape: {\n radiusSize: enums.RadiusSizes.medium,\n borderWidth: enums.BorderWidths.thin,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.fast,\n animationEasing: enums.AnimationEasings[\"ease-out\"],\n hoverOpacity: 0.85,\n },\n },\n \"enterprise-dash\": {\n id: \"enterprise-dash\",\n tags: [\"app\", \"featured\"],\n name: \"Enterprise Dashboard\",\n description:\n \"Data-dense business intelligence app interface with organized hierarchy and professional polish\",\n options: {\n liquidGlassEffects: false,\n },\n colors: {\n primary: \"#0066cc\", // corporate blue for primary actions\n secondary: \"#5f6368\", // neutral gray for text and chrome\n accent: \"#1a73e8\", // bright blue for highlights\n background: \"#ffffff\",\n success: \"#34a853\",\n warning: \"#fbbc04\",\n danger: \"#ea4335\",\n darkMode: {\n background: \"#202124\",\n secondary: \"#9aa0a6\",\n primary: \"#8ab4f8\",\n },\n },\n typography: {\n baseFontSize: 14,\n fontScale: 1.2,\n fontFamilyHeadings:\n \"'Roboto', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontFamilyBody:\n \"'Roboto', system-ui, -apple-system, 'Segoe UI', sans-serif\",\n fontFamilyMono: \"'Roboto Mono', ui-monospace, Consolas, monospace\",\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n lineHeightNormal: enums.LineHeights.tight,\n },\n spatialRhythm: {\n baseUnit: 4,\n scaleRatio: 1.2,\n containerPadding: 1.5,\n sectionSpacing: 2.0,\n },\n shape: {\n radiusSize: enums.RadiusSizes.small,\n borderWidth: enums.BorderWidths.thin,\n },\n layers: {\n shadowDepth: \"light\",\n blurLight: 4,\n },\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.fast,\n animationEasing: enums.AnimationEasings[\"ease-in-out\"],\n focusRingWidth: 2,\n },\n layout: {\n densityCompact: 0.85,\n gridColumns: 12,\n },\n }\n \n};\n\n/**\n * Default configuration for the Pure Design System.\n * This file defines the default settings for colors, typography,\n * spatial rhythm, layers, shape, behavior, layout, advanced options,\n * accessibility, components, and icons.\n */\n// Default configuration moved into presets as the canonical \"default\" entry\npresets.default = {\n id: \"default\",\n name: \"Default\",\n tags: [\"app\", \"featured\"],\n description: \"Fresh and modern design system with balanced aesthetics and usability\",\n options: {\n liquidGlassEffects: false,\n backgroundMesh: 0,\n },\n \n form: {\n options: {\n widgets: {\n booleans: \"toggle\", // 'toggle' | 'toggle-with-icons' | 'checkbox'\n numbers: \"input\", // 'input' | 'range'\n selects: \"standard\", // 'standard' | 'dropdown'\n },\n layouts: {\n fieldsets: \"default\", // 'default' | 'flex' | 'grid' | 'accordion' | 'tabs' | 'card'\n arrays: \"default\", // 'default' | 'compact'\n },\n enhancements: {\n icons: true, // Enable icon-enhanced inputs\n datalists: true, // Enable datalist autocomplete\n rangeOutput: true, // Use .range-output for ranges\n colorInput: true, // Use label[data-color] for color inputs\n },\n validation: {\n showErrors: true, // Show validation errors inline\n validateOnChange: false, // Validate on every change vs on submit\n },\n }\n },\n colors: {\n // Palette - base colors that generate entire color palettes\n primary: \"#0e7490\", // Darker cyan for better contrast\n secondary: \"#a99b95\", // REQUIRED: Secondary/neutral color for gray scale generation\n accent: \"#e54271\", // Accent color (pink red)\n background: \"#e7e6de\", // Base background color for light mode\n\n // Dark mode overrides - specify custom dark theme colors\n darkMode: {\n background: \"#16171a\", // Custom dark mode background (cool blue-gray)\n secondary: \"#8b9199\", // Optional: custom dark grays (uses light secondary if omitted)\n primary: \"#06b6d4\", // cyan-500 - optimized mid-tone\n // accent: null, // Optional: override accent color for dark mode\n },\n\n // Semantic colors (auto-generated from primary if not specified)\n success: null, // Auto-generated green from primary if null\n warning: \"#B38600\", // Warning color (defaults to accent if null)\n danger: null, // Auto-generated red from primary if null\n info: null, // Defaults to primary color if null\n\n // Advanced color options\n gradientStops: 3,\n elevationOpacity: 0.05,\n },\n\n typography: {\n // Essential typography settings (exposed in simple form)\n baseFontSize: 16,\n fontScale: 1.2, // Multiplier for heading size generation (1.2 = minor third)\n fontFamilyHeadings:\n 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n fontFamilyBody: 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif',\n fontFamilyMono:\n 'ui-monospace, \"Cascadia Code\", \"Source Code Pro\", Menlo, Consolas, monospace',\n\n // Advanced typography options (exposed in advanced form)\n fontWeightLight: enums.FontWeights.light,\n fontWeightNormal: enums.FontWeights.normal,\n fontWeightMedium: enums.FontWeights.medium,\n fontWeightSemibold: enums.FontWeights.semibold,\n fontWeightBold: enums.FontWeights.bold,\n lineHeightTight: enums.LineHeights.tight,\n lineHeightNormal: enums.LineHeights.normal,\n lineHeightRelaxed: enums.LineHeights.relaxed,\n letterSpacingTight: -0.025,\n letterSpacingNormal: 0,\n letterSpacingWide: 0.025,\n },\n\n spatialRhythm: {\n // Essential spacing setting (exposed in simple form)\n baseUnit: 4, // Base spacing unit in pixels (typically 16 = 1rem)\n\n // Advanced spacing options\n scaleRatio: 1.25,\n maxSpacingSteps: 32,\n containerPadding: 1.0,\n inputPadding: 0.75,\n buttonPadding: 1.0,\n sectionSpacing: 2.0,\n },\n\n layers: {\n baseShadowOpacity: 0.1,\n darkMode: {\n baseShadowOpacity: 0.25,\n },\n shadowDepth: \"medium\",\n blurLight: 4,\n blurMedium: 8,\n blurHeavy: 16,\n zIndexBase: 0,\n zIndexDropdown: 1000,\n zIndexSticky: 1020,\n zIndexFixed: 1030,\n zIndexModal: 1040,\n zIndexPopover: 1050,\n zIndexTooltip: 1060,\n zIndexNotification: 1070,\n },\n\n shape: {\n radiusSize: enums.RadiusSizes.large,\n borderWidth: enums.BorderWidths.medium,\n customRadius: null,\n },\n\n behavior: {\n transitionSpeed: enums.TransitionSpeeds.normal,\n animationEasing: enums.AnimationEasings[\"ease-out\"],\n customTransitionSpeed: null,\n customEasing: null,\n focusRingWidth: 3,\n focusRingOpacity: 0.3,\n hoverOpacity: 0.8,\n },\n\n layout: {\n gridColumns: 12,\n gridGutter: 1.0,\n baseShadowOpacity: 0.1,\n darkMode: {\n baseShadowOpacity: 0.25,\n },\n breakpoints: {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n },\n densityCompact: 0.8,\n densityNormal: 1.0,\n densityComfortable: 1.2,\n buttonMinHeight: 30,\n inputMinHeight: 40,\n\n // Layout utility system\n utilities: {\n grid: true,\n flex: true,\n spacing: true,\n container: true,\n },\n\n gridSystem: {\n columns: [1, 2, 3, 4, 6],\n autoFitBreakpoints: {\n sm: \"150px\",\n md: \"250px\",\n lg: \"350px\",\n xl: \"450px\",\n },\n enableGapUtilities: true,\n },\n\n containerMaxWidth: \"1400px\",\n containerPadding: \"var(--spacing-6)\",\n },\n\n advanced: {\n linkStyle: enums.LinkStyles.inline,\n colorDerivation: \"hsl\",\n },\n\n a11y: {\n minTouchTarget: enums.TouchTargetSizes.standard,\n prefersReducedMotion: true,\n focusStyle: enums.FocusStyles.ring,\n },\n\n icons: {\n set: \"phosphor\", // https://phosphoricons.com/\n weight: \"regular\",\n defaultSize: 24,\n externalPath: \"/assets/img/icons/\", // Path for on-demand external SVG icons\n sizes: enums.IconSizes,\n include: {\n navigation: [\n \"arrow-left\",\n \"arrow-right\",\n \"arrow-up\",\n \"arrow-down\",\n \"arrow-counter-clockwise\",\n \"caret-left\",\n \"caret-right\",\n \"caret-down\",\n \"caret-up\",\n \"x\",\n \"list\",\n \"list-dashes\",\n \"dots-three-vertical\",\n \"dots-three\",\n \"house\",\n \"gear\",\n \"magnifying-glass\",\n \"funnel\",\n \"tabs\",\n \"sidebar\",\n ],\n actions: [\n \"plus\",\n \"minus\",\n \"check\",\n \"trash\",\n \"pencil\",\n \"floppy-disk\",\n \"copy\",\n \"download\",\n \"upload\",\n \"share\",\n \"link\",\n \"eye\",\n \"eye-slash\",\n \"heart\",\n \"star\",\n \"bookmark\",\n \"note-pencil\",\n \"cursor-click\",\n \"clipboard\",\n \"magic-wand\",\n \"sparkle\",\n ],\n communication: [\n \"envelope\",\n \"bell\",\n \"bell-ringing\",\n \"bell-simple\",\n \"chat-circle\",\n \"phone\",\n \"paper-plane-tilt\",\n \"user\",\n \"users\",\n \"user-gear\",\n \"at\",\n ],\n content: [\n \"image\",\n \"file\",\n \"file-text\",\n \"file-css\",\n \"file-js\",\n \"folder\",\n \"folder-open\",\n \"book-open\",\n \"camera\",\n \"video-camera\",\n \"play\",\n \"pause\",\n \"microphone\",\n \"brackets-curly\",\n \"code\",\n \"folder-simple\",\n \"grid-four\",\n \"briefcase\",\n \"chart-line\",\n \"chart-bar\",\n \"database\",\n \"map-pin\"\n ],\n status: [\n \"info\",\n \"warning\",\n \"check-circle\",\n \"x-circle\",\n \"question\",\n \"shield\",\n \"shield-check\",\n \"shield-warning\",\n \"lock\",\n \"lock-open\",\n \"fingerprint\",\n \"circle-notch\"\n ],\n time: [\"calendar\", \"clock\", \"timer\", \"hourglass\"],\n commerce: [\n \"shopping-cart\",\n \"credit-card\",\n \"currency-dollar\",\n \"tag\",\n \"receipt\",\n \"storefront\",\n ],\n formatting: [\n \"text-align-left\",\n \"text-align-center\",\n \"text-align-right\",\n \"text-b\",\n \"text-italic\",\n \"text-underline\",\n \"list-bullets\",\n \"list-numbers\",\n \"text-aa\",\n ],\n system: [\n \"cloud\",\n \"cloud-arrow-up\",\n \"cloud-arrow-down\",\n \"desktop\",\n \"device-mobile\",\n \"globe\",\n \"wifi-high\",\n \"battery-charging\",\n \"sun\",\n \"moon\",\n \"moon-stars\",\n \"palette\",\n \"rocket\",\n \"feather\",\n \"square\",\n \"circle\",\n \"squares-four\",\n \"lightning\",\n \"wrench\",\n ],\n },\n // Default sprite path for internal/dev use. For consumer apps, icons are exported to\n // [config.static.root]/icons/pds-icons.svg and components should consume from there.\n spritePath: \"/assets/pds/icons/pds-icons.svg\",\n },\n\n debug: false,\n};\n\nexport const PDS_DEFAULT_CONFIG_EDITOR_METADATA = getDesignConfigEditorMetadata(\n presets.default\n);\n\nexport const PDS_DEFAULT_CONFIG_FORM_SCHEMA = buildDesignConfigFormSchema(\n presets.default\n);\n// Note: presets is now a stable object keyed by id\n\n/**\n * Default logging method - can be overridden at config root level\n * This is exported separately so it can be added to the root config object\n * @param {string} level - log level: 'log', 'warn', 'error', 'debug', 'info'\n * @param {string} message - primary message to log\n * @param {...any} data - additional data to log\n */\nexport function defaultLog(level = \"log\", message, ...data) {\n const runtimeLogger = globalThis?.PDS?.log;\n if (typeof runtimeLogger === \"function\") {\n runtimeLogger(level, message, ...data);\n return;\n }\n\n if (typeof console === \"undefined\") return;\n const method =\n typeof console[level] === \"function\"\n ? console[level].bind(console)\n : typeof console.log === \"function\"\n ? console.log.bind(console)\n : null;\n if (!method) return;\n\n if (data.length > 0) {\n method(message, ...data);\n } else {\n method(message);\n }\n}\n", "\uFEFFimport { presets } from \"./pds-config.js\";\n\n/**\n * Generator - A JS-config-first design system\n * Generates comprehensive CSS variables and styles from a minimal configuration\n */\nexport class Generator {\n // Singleton instance\n static #instance;\n\n static get instance() {\n return this.#instance;\n }\n\n // Private internal fields\n #layers;\n #stylesheets;\n //#blobURLs;\n\n constructor(options = {}) {\n this.options = {\n // All defaults should come from config, no hardcoded values\n debug: false,\n ...options,\n };\n\n // Ensure design is always present for internal access\n if (!this.options.design) {\n this.options.design = {};\n }\n if (this.options.debug) {\n this.options.log?.(\"debug\", \"Generator options:\", this.options);\n }\n\n // Set singleton instance\n Generator.#instance = this;\n\n this.tokens = this.generateTokens();\n if (this.options.debug) {\n this.options.log?.(\"debug\", \"Generated tokens:\", this.tokens);\n }\n\n // NEW: Generate separate layers for modern architecture\n this.#generateLayers();\n\n // Only create browser-specific features if in browser environment\n if (typeof CSSStyleSheet !== \"undefined\") {\n this.#createConstructableStylesheets();\n //this.#createBlobURLs();\n\n // if (this.options.debug) {\n // this.options.log?.(\"debug\", \"[Generator] Created BLOB URLs:\", {\n // styles: this.#blobURLs?.styles,\n // primitives: this.#blobURLs?.primitives,\n // });\n // }\n } else {\n if (this.options.debug) {\n this.options.log?.(\n \"debug\",\n \"[Generator] Skipping browser features (CSSStyleSheet not available)\",\n );\n }\n }\n }\n\n generateTokens() {\n // Access design configuration from options.design\n const config = this.options.design || {};\n const shadowOpacityConfig = this.#resolveShadowOpacityConfig(config);\n const layersConfig = config.layers || {};\n const shadowConfig = this.#mergeShadowConfig(\n layersConfig,\n shadowOpacityConfig.light,\n );\n const shadows = this.#generateShadowTokens(shadowConfig);\n const darkShadows =\n shadowOpacityConfig.dark != null\n ? this.#generateShadowTokens(\n this.#mergeShadowConfig(layersConfig, shadowOpacityConfig.dark),\n )\n : null;\n\n return {\n colors: this.#generateColorTokens(\n config.colors || {},\n shadowOpacityConfig,\n ),\n spacing: this.generateSpacingTokens(config.spatialRhythm || {}),\n radius: this.#generateRadiusTokens(config.shape || {}),\n borderWidths: this.#generateBorderWidthTokens(config.shape || {}),\n typography: this.generateTypographyTokens(config.typography || {}),\n shadows,\n darkShadows,\n layout: this.#generateLayoutTokens(config.layout || {}),\n transitions: this.#generateTransitionTokens(config.behavior || {}),\n zIndex: this.#generateZIndexTokens(config.layers || {}),\n icons: this.#generateIconTokens(config.icons || {}),\n };\n }\n\n #resolveShadowOpacityConfig(config = {}) {\n const layout = config.layout || {};\n const layers = config.layers || {};\n\n return {\n light: this.#normalizeOpacity(\n layout.baseShadowOpacity ?? layers.baseShadowOpacity,\n ),\n dark: this.#normalizeOpacity(\n layout.darkMode?.baseShadowOpacity ??\n layers.darkMode?.baseShadowOpacity,\n ),\n };\n }\n\n #normalizeOpacity(value) {\n const numeric = Number(value);\n if (!Number.isFinite(numeric)) return undefined;\n return Math.min(Math.max(numeric, 0), 1);\n }\n\n #mergeShadowConfig(layersConfig = {}, baseShadowOpacity) {\n const merged = { ...layersConfig };\n if (baseShadowOpacity != null) {\n merged.baseShadowOpacity = baseShadowOpacity;\n }\n return merged;\n }\n\n #generateColorTokens(colorConfig, shadowOpacityConfig = {}) {\n const {\n primary = \"#3b82f6\",\n secondary = \"#64748b\", // REQUIRED for gray scale generation\n accent = \"#ec4899\",\n background = \"#ffffff\",\n success = null,\n warning = \"#FFBF00\",\n danger = null,\n info = null,\n darkMode = {}, // Extract dark mode overrides\n } = colorConfig;\n\n const colors = {\n // Generate color scales\n primary: this.#generateColorScale(primary),\n secondary: this.#generateColorScale(secondary),\n accent: this.#generateColorScale(accent),\n\n // Semantic colors - use provided or derive from primary/accent\n success: this.#generateColorScale(\n success || this.#deriveSuccessColor(primary),\n ),\n warning: this.#generateColorScale(warning || accent),\n danger: this.#generateColorScale(\n danger || this.#deriveDangerColor(primary),\n ),\n info: this.#generateColorScale(info || primary),\n\n // Neutral grays derived from secondary color\n gray: this.#generateGrayScale(secondary),\n\n // Background-based surface colors for tasteful variations\n surface: this.#generateBackgroundShades(background),\n };\n\n // Add adaptive fieldset colors to surface\n colors.surface.fieldset = this.#generateFieldsetAdaptiveColors(\n colors.surface,\n );\n\n // Generate smart surface tokens with context-aware text, icons, shadows, and borders\n colors.surfaceSmart = this.#generateSmartSurfaceTokens(\n colors.surface,\n shadowOpacityConfig,\n );\n\n // Generate dark mode variants using darkMode overrides from config\n colors.dark = this.#generateDarkModeColors(\n colors,\n background,\n darkMode, // Pass the darkMode object directly\n );\n\n // Generate smart tokens for dark mode surfaces too\n if (colors.dark && colors.dark.surface) {\n colors.dark.surfaceSmart = this.#generateSmartSurfaceTokens(\n colors.dark.surface,\n shadowOpacityConfig,\n );\n }\n\n // Generate semantic interactive role tokens so components can avoid hardcoded ramp picks.\n colors.interactive = {\n light: this.#buildInteractiveRoleTokens(\n colors.primary,\n colors.surface.base,\n ),\n dark: this.#buildInteractiveRoleTokens(\n colors.dark.primary,\n colors.dark.surface.base,\n ),\n };\n\n // Accent role tokens mirror primary behavior for expressive accents on UI surfaces.\n colors.accentInteractive = {\n light: this.#buildInteractiveRoleTokens(\n colors.accent,\n colors.surface.base,\n ),\n dark: this.#buildInteractiveRoleTokens(\n colors.dark.accent,\n colors.dark.surface.base,\n ),\n };\n\n colors.surfaceAccent = {\n light: this.#buildSurfaceAccentTokens(colors.accent, colors.surface),\n dark: this.#buildSurfaceAccentTokens(colors.dark.accent, colors.dark.surface),\n };\n\n // Semantic role tokens for danger (mirrors primary/accent pattern).\n colors.dangerInteractive = {\n light: this.#buildInteractiveRoleTokens(colors.danger, colors.surface.base),\n dark: this.#buildInteractiveRoleTokens(colors.dark.danger, colors.dark.surface.base),\n };\n\n // Status role tokens for success/warning/info to avoid hardcoded shade picks in UI roles.\n colors.successInteractive = {\n light: this.#buildInteractiveRoleTokens(colors.success, colors.surface.base),\n dark: this.#buildInteractiveRoleTokens(colors.dark.success, colors.dark.surface.base),\n };\n\n colors.warningInteractive = {\n light: this.#buildInteractiveRoleTokens(colors.warning, colors.surface.base),\n dark: this.#buildInteractiveRoleTokens(colors.dark.warning, colors.dark.surface.base),\n };\n\n colors.infoInteractive = {\n light: this.#buildInteractiveRoleTokens(colors.info, colors.surface.base),\n dark: this.#buildInteractiveRoleTokens(colors.dark.info, colors.dark.surface.base),\n };\n\n // Surface-aware semantic status text tokens for all core status families.\n colors.surfaceStatus = {\n light: {\n success: this.#buildSurfaceAccentTokens(colors.success, colors.surface),\n warning: this.#buildSurfaceAccentTokens(colors.warning, colors.surface),\n info: this.#buildSurfaceAccentTokens(colors.info, colors.surface),\n danger: this.#buildSurfaceAccentTokens(colors.danger, colors.surface),\n },\n dark: {\n success: this.#buildSurfaceAccentTokens(colors.dark.success, colors.dark.surface),\n warning: this.#buildSurfaceAccentTokens(colors.dark.warning, colors.dark.surface),\n info: this.#buildSurfaceAccentTokens(colors.dark.info, colors.dark.surface),\n danger: this.#buildSurfaceAccentTokens(colors.dark.danger, colors.dark.surface),\n },\n };\n\n return colors;\n }\n\n #generateColorScale(baseColor) {\n const hsl = this.#hexToHsl(baseColor);\n return {\n 50: this.#hslToHex(\n hsl.h,\n Math.max(hsl.s - 10, 10),\n Math.min(hsl.l + 45, 95),\n ),\n 100: this.#hslToHex(\n hsl.h,\n Math.max(hsl.s - 5, 15),\n Math.min(hsl.l + 35, 90),\n ),\n 200: this.#hslToHex(hsl.h, hsl.s, Math.min(hsl.l + 25, 85)),\n 300: this.#hslToHex(hsl.h, hsl.s, Math.min(hsl.l + 15, 75)),\n 400: this.#hslToHex(hsl.h, hsl.s, Math.min(hsl.l + 5, 65)),\n 500: baseColor, // Base color\n 600: this.#hslToHex(hsl.h, hsl.s, Math.max(hsl.l - 10, 25)),\n 700: this.#hslToHex(hsl.h, hsl.s, Math.max(hsl.l - 20, 20)),\n 800: this.#hslToHex(hsl.h, hsl.s, Math.max(hsl.l - 30, 15)),\n 900: this.#hslToHex(hsl.h, hsl.s, Math.max(hsl.l - 40, 10)),\n };\n }\n\n #deriveSuccessColor(mainColor) {\n // Generate a green success color by rotating the hue of the main color\n const hsl = this.#hexToHsl(mainColor);\n return this.#hslToHex(120, Math.max(hsl.s, 60), 45); // Green-ish success\n }\n\n #deriveDangerColor(mainColor) {\n // Generate a red danger color by rotating the hue of the main color\n const hsl = this.#hexToHsl(mainColor);\n return this.#hslToHex(0, Math.max(hsl.s, 70), 50); // Red-ish danger\n }\n\n #generateGrayScale(supportingColor) {\n // Generate gray scale based on supporting color for brand consistency\n const hsl = this.#hexToHsl(supportingColor);\n const baseHue = hsl.h;\n const baseSat = Math.min(hsl.s, 10); // Keep it subtle\n\n return {\n 50: this.#hslToHex(baseHue, baseSat, 98),\n 100: this.#hslToHex(baseHue, baseSat, 95),\n 200: this.#hslToHex(baseHue, baseSat, 88),\n 300: this.#hslToHex(baseHue, baseSat, 78),\n 400: this.#hslToHex(baseHue, baseSat, 60),\n 500: supportingColor, // Use the actual supporting color\n 600: this.#hslToHex(baseHue, Math.min(baseSat + 5, 15), 45),\n 700: this.#hslToHex(baseHue, Math.min(baseSat + 8, 18), 35),\n 800: this.#hslToHex(baseHue, Math.min(baseSat + 10, 20), 20),\n 900: this.#hslToHex(baseHue, Math.min(baseSat + 12, 22), 10),\n };\n }\n\n #generateBackgroundShades(backgroundBase) {\n const hsl = this.#hexToHsl(backgroundBase);\n\n // Generate subtle variations of the background\n return {\n base: backgroundBase,\n subtle: this.#hslToHex(hsl.h, Math.max(hsl.s, 2), Math.max(hsl.l - 2, 2)), // Very subtle darker\n elevated: this.#hslToHex(\n hsl.h,\n Math.max(hsl.s, 3),\n Math.max(hsl.l - 4, 5),\n ), // Slightly darker for elevated surfaces\n sunken: this.#hslToHex(hsl.h, Math.max(hsl.s, 4), Math.max(hsl.l - 6, 8)), // For input fields, subtle depth\n overlay: this.#hslToHex(\n hsl.h,\n Math.max(hsl.s, 2),\n Math.min(hsl.l + 2, 98),\n ), // Slightly lighter for overlays\n inverse: this.#generateSmartDarkBackground(backgroundBase), // Smart dark background\n hover: `color-mix(in oklab, var(--color-surface-base) 92%, var(--color-text-primary) 8%);`,\n };\n }\n\n #generateFieldsetAdaptiveColors(backgroundShades) {\n // Generate fieldset backgrounds that are subtly different from each surface\n return {\n base: backgroundShades.subtle, // Subtle darker than base\n subtle: backgroundShades.elevated, // Elevated from subtle\n elevated: backgroundShades.sunken, // Sunken from elevated (creates contrast)\n sunken: this.#darkenColor(backgroundShades.sunken, 0.05), // Slightly darker than sunken\n overlay: backgroundShades.elevated, // Elevated from overlay\n };\n }\n\n #darkenColor(hexColor, factor = 0.05) {\n const hsl = this.#hexToHsl(hexColor);\n const darkerLightness = Math.max(hsl.l - hsl.l * factor, 5);\n return this.#hslToHex(hsl.h, hsl.s, darkerLightness);\n }\n\n #generateSmartDarkBackground(lightBackground) {\n const hsl = this.#hexToHsl(lightBackground);\n\n // If it's already a light color, create a smart dark version\n if (hsl.l > 50) {\n // Keep the same hue and saturation characteristics but make it dark\n // Increase saturation slightly for richness in dark mode\n const darkSaturation = Math.min(hsl.s + 5, 25);\n const darkLightness = Math.max(12 - (hsl.l - 50) * 0.1, 8); // Darker for lighter source colors\n\n return this.#hslToHex(hsl.h, darkSaturation, darkLightness);\n } else {\n // If the source is already dark, create a lighter version\n const lightSaturation = Math.max(hsl.s - 10, 5);\n const lightLightness = Math.min(85 + (50 - hsl.l) * 0.3, 95);\n\n return this.#hslToHex(hsl.h, lightSaturation, lightLightness);\n }\n }\n\n #generateDarkModeColors(\n lightColors,\n backgroundBase = \"#ffffff\",\n overrides = {},\n ) {\n // Use custom dark background if provided, otherwise auto-generate\n const darkBackgroundBase = overrides.background\n ? overrides.background\n : this.#generateSmartDarkBackground(backgroundBase);\n\n const darkSurface = this.#generateBackgroundShades(darkBackgroundBase);\n\n const buildScale = (overrideColor, fallbackScale) =>\n overrideColor ? this.#generateColorScale(overrideColor) : fallbackScale;\n\n return {\n surface: {\n ...darkSurface,\n fieldset: this.#generateDarkModeFieldsetColors(darkSurface),\n },\n // Keep scale direction stable in both themes (50 = lightest, 900 = darkest).\n primary: buildScale(overrides.primary, lightColors.primary),\n secondary: buildScale(overrides.secondary, lightColors.secondary),\n accent: buildScale(overrides.accent, lightColors.accent),\n // Grays are derived from secondary, so only regenerate when secondary is overridden.\n gray: overrides.secondary\n ? this.#generateGrayScale(overrides.secondary)\n : lightColors.gray,\n success: buildScale(overrides.success, lightColors.success),\n info: buildScale(overrides.info, lightColors.info),\n warning: buildScale(overrides.warning, lightColors.warning),\n danger: buildScale(overrides.danger, lightColors.danger),\n };\n }\n\n // -------------------------\n // Color contrast helpers\n // -------------------------\n #hexToRgb(hex) {\n const h = String(hex || \"\").replace(\"#\", \"\");\n const full =\n h.length === 3\n ? h\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : h;\n const num = parseInt(full, 16);\n return { r: (num >> 16) & 255, g: (num >> 8) & 255, b: num & 255 };\n }\n\n #luminance(hex) {\n const { r, g, b } = this.#hexToRgb(hex);\n const srgb = [r / 255, g / 255, b / 255].map((v) =>\n v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4),\n );\n return 0.2126 * srgb[0] + 0.7152 * srgb[1] + 0.0722 * srgb[2];\n }\n\n #contrastRatio(aHex, bHex) {\n const L1 = this.#luminance(aHex);\n const L2 = this.#luminance(bHex);\n const lighter = Math.max(L1, L2);\n const darker = Math.min(L1, L2);\n return (lighter + 0.05) / (darker + 0.05);\n }\n\n // Choose a readable 'on' color for a background: prefer white or black if they meet contrast target\n #findReadableOnColor(bgHex, target = 4.5) {\n if (!bgHex) return \"#000000\";\n const white = \"#ffffff\";\n const black = \"#000000\";\n const cw = this.#contrastRatio(bgHex, white);\n if (cw >= target) return white;\n const cb = this.#contrastRatio(bgHex, black);\n if (cb >= target) return black;\n\n // Neither black nor white meets the target \u2014 pick the one with higher ratio\n return cb > cw ? black : white;\n }\n\n // Convert hex color to rgba string\n #rgbaFromHex(hex, alpha = 1.0) {\n const { r, g, b } = this.#hexToRgb(hex);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n\n // Mix color toward target by a given factor (0 = original, 1 = target)\n #mixTowards(sourceHex, targetHex, factor = 0.5) {\n const src = this.#hexToRgb(sourceHex);\n const tgt = this.#hexToRgb(targetHex);\n const r = Math.round(src.r + (tgt.r - src.r) * factor);\n const g = Math.round(src.g + (tgt.g - src.g) * factor);\n const b = Math.round(src.b + (tgt.b - src.b) * factor);\n return this.#rgbToHex(r, g, b);\n }\n\n // Convert RGB to hex\n #rgbToHex(r, g, b) {\n const toHex = (n) => {\n const hex = Math.max(0, Math.min(255, Math.round(n))).toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n };\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }\n\n #generateDarkModeFieldsetColors(darkSurface) {\n // In dark mode, fieldsets should be slightly lighter for contrast\n return {\n base: darkSurface.elevated, // Elevated from dark base\n subtle: darkSurface.overlay, // Overlay from dark subtle\n elevated: this.#lightenColor(darkSurface.elevated, 0.08), // Slightly lighter than elevated\n sunken: darkSurface.elevated, // Elevated from sunken\n overlay: this.#lightenColor(darkSurface.overlay, 0.05), // Slightly lighter than overlay\n };\n }\n\n /**\n * Pick a readable primary shade on a given surface background, targeting AA contrast.\n * Returns the first shade that meets target from a preferred order; falls back to the best ratio.\n */\n #pickReadablePrimaryOnSurface(\n primaryScale = {},\n surfaceBg = \"#000000\",\n target = 4.5,\n ) {\n const order = [\"600\", \"700\", \"800\", \"500\", \"400\", \"900\", \"300\", \"200\"]; // preference for UI semantics\n let best = { shade: null, color: null, ratio: 0 };\n for (const key of order) {\n const hex = primaryScale?.[key];\n if (!hex || typeof hex !== \"string\") continue;\n const r = this.#contrastRatio(hex, surfaceBg);\n if (r > best.ratio) best = { shade: key, color: hex, ratio: r };\n if (r >= target) return hex;\n }\n // If no shade meets target, return the highest contrast candidate\n return best.color || primaryScale?.[\"600\"] || primaryScale?.[\"500\"];\n }\n\n #buildInteractiveRoleTokens(scale = {}, surfaceBg = \"#ffffff\") {\n const isDarkSurface = this.#luminance(surfaceBg) < 0.18;\n const fill = this.#pickFillShadeForWhite(scale, 4.5);\n // On dark surfaces hover/active should lighten the fill (move toward visible);\n // on light surfaces they should deepen it.\n const fillHover = isDarkSurface\n ? this.#lightenColor(fill, 0.15)\n : this.#darkenColor(fill, 0.1);\n const fillActive = isDarkSurface\n ? this.#lightenColor(fill, 0.07)\n : this.#darkenColor(fill, 0.2);\n const text = this.#pickReadablePrimaryOnSurface(scale, surfaceBg, 4.5);\n const textHover = this.#pickReadablePrimaryOnSurface(scale, surfaceBg, 5.5);\n const focusRing = this.#pickReadablePrimaryOnSurface(scale, surfaceBg, 3.0);\n\n return {\n fill,\n fillHover,\n fillActive,\n text,\n textHover: textHover || text,\n // Keep visited links legible by subtly mixing with the current surface context.\n textVisited: this.#mixTowards(text || fill, surfaceBg, 0.2),\n focusRing: focusRing || text || fill,\n selectionBg: text || fill,\n selectionText: this.#findReadableOnColor(text || fill, 4.5),\n contrast: this.#findReadableOnColor(fill, 4.5),\n };\n }\n\n #buildSurfaceAccentTokens(scale = {}, surfaces = {}) {\n const roles = {};\n\n Object.entries(surfaces).forEach(([surfaceKey, bgColor]) => {\n if (!bgColor || typeof bgColor !== \"string\" || !bgColor.startsWith(\"#\")) {\n return;\n }\n\n const text = this.#pickReadablePrimaryOnSurface(scale, bgColor, 4.5);\n const textHover = this.#pickReadablePrimaryOnSurface(scale, bgColor, 5.0);\n roles[surfaceKey] = {\n text,\n textHover: textHover || text,\n };\n });\n\n return roles;\n }\n\n // Pick a color scale shade that supports white text at AA\n #pickFillShadeForWhite(scale = {}, target = 4.5) {\n const order = [\"600\", \"700\", \"800\", \"500\", \"400\", \"900\"]; // typical UI fills\n let best = { shade: null, color: null, ratio: 0 };\n for (const key of order) {\n const hex = scale?.[key];\n if (!hex || typeof hex !== \"string\") continue;\n const r = this.#contrastRatio(hex, \"#ffffff\");\n if (r > best.ratio) best = { shade: key, color: hex, ratio: r };\n if (r >= target) return hex;\n }\n return best.color || scale?.[\"600\"] || scale?.[\"500\"];\n }\n\n /**\n * Generate smart surface tokens with context-aware colors for text, icons, shadows, and borders.\n * Each surface variant gets its own semantic tokens that automatically adapt to the surface's luminance.\n *\n * @param {Object} surfaceShades - Object with surface color variants (base, subtle, elevated, etc.)\n * @returns {Object} Smart tokens for each surface with text, icon, shadow, and border colors\n */\n #generateSmartSurfaceTokens(surfaceShades, shadowOpacityConfig = {}) {\n const tokens = {};\n const lightShadowOpacity = shadowOpacityConfig.light ?? 0.1;\n const darkShadowOpacity = shadowOpacityConfig.dark ?? 0.25;\n\n Object.entries(surfaceShades).forEach(([key, bgColor]) => {\n // Skip non-color values (like 'hover' which uses CSS functions)\n if (!bgColor || typeof bgColor !== \"string\" || !bgColor.startsWith(\"#\")) {\n return;\n }\n\n const isDark = this.#luminance(bgColor) < 0.5;\n\n // Text colors with proper contrast ratios\n const textPrimary = this.#findReadableOnColor(bgColor, 4.5); // WCAG AA\n const textSecondary = this.#findReadableOnColor(bgColor, 3.0); // Relaxed for secondary\n const textMuted = this.#mixTowards(textPrimary, bgColor, 0.4); // 40% toward background\n\n // Icon color matches primary text for consistency\n const icon = textPrimary;\n const iconSubtle = textMuted;\n\n // Context-aware shadows: light shadows on dark surfaces, dark shadows on light\n // Light shadows need higher opacity to be visible on dark backgrounds\n const shadowBase = isDark ? \"#ffffff\" : \"#000000\";\n const shadowOpacity = isDark\n ? darkShadowOpacity\n : lightShadowOpacity;\n const shadowColor = this.#rgbaFromHex(shadowBase, shadowOpacity);\n\n // Semi-transparent borders that work on any surface\n const borderBase = isDark ? \"#ffffff\" : \"#000000\";\n const borderOpacity = isDark ? 0.15 : 0.1;\n const border = this.#rgbaFromHex(borderBase, borderOpacity);\n\n tokens[key] = {\n bg: bgColor,\n text: textPrimary,\n textSecondary: textSecondary,\n textMuted: textMuted,\n icon: icon,\n iconSubtle: iconSubtle,\n shadow: shadowColor,\n border: border,\n scheme: isDark ? \"dark\" : \"light\", // CSS color-scheme value\n };\n });\n\n return tokens;\n }\n\n #lightenColor(hexColor, factor = 0.05) {\n const hsl = this.#hexToHsl(hexColor);\n const lighterLightness = Math.min(hsl.l + (100 - hsl.l) * factor, 95);\n return this.#hslToHex(hsl.h, hsl.s, lighterLightness);\n }\n\n /**\n * Generate spacing tokens based on the provided configuration.\n * @param {Object} spatialConfig\n * @returns { String } CSS spacing tokens\n */\n generateSpacingTokens(spatialConfig) {\n const {\n baseUnit = 4,\n scaleRatio = 1.25,\n maxSpacingSteps = 12, // Trim to realistic range\n } = spatialConfig;\n\n // Validate and convert to numbers, with fallbacks\n const validBaseUnit = Number.isFinite(Number(baseUnit))\n ? Number(baseUnit)\n : 4;\n const validMaxSpacingSteps = Math.min(\n Number.isFinite(Number(maxSpacingSteps)) ? Number(maxSpacingSteps) : 12,\n 12,\n );\n\n const spacing = { 0: \"0\" };\n\n // Generate simple 4px incremental spacing scale\n // spacing-1: 4px, spacing-2: 8px, spacing-3: 12px, etc.\n for (let i = 1; i <= validMaxSpacingSteps; i++) {\n spacing[i] = `${validBaseUnit * i}px`;\n }\n\n return spacing;\n }\n\n #generateRadiusTokens(shapeConfig) {\n const { radiusSize = \"medium\", customRadius = null } = shapeConfig;\n\n // Accept either a custom value, an enum key (\"small\"), or an enum value (e.g., 4)\n let baseRadius;\n if (customRadius !== null && customRadius !== undefined) {\n baseRadius = customRadius;\n } else if (typeof radiusSize === \"number\") {\n // Direct numeric value (including 0)\n baseRadius = radiusSize;\n } else if (typeof radiusSize === \"string\") {\n // Enum key (e.g., \"none\", \"small\", \"medium\", \"large\", \"full\")\n baseRadius = enums.RadiusSizes[radiusSize] ?? enums.RadiusSizes.medium;\n } else {\n baseRadius = enums.RadiusSizes.medium;\n }\n\n // Validate and convert baseRadius to a number\n const validBaseRadius = Number.isFinite(Number(baseRadius))\n ? Number(baseRadius)\n : enums.RadiusSizes.medium;\n\n return {\n none: \"0\",\n xs: `${\n Number.isFinite(validBaseRadius * 0.25)\n ? Math.round(validBaseRadius * 0.25)\n : 0\n }px`,\n sm: `${\n Number.isFinite(validBaseRadius * 0.5)\n ? Math.round(validBaseRadius * 0.5)\n : 0\n }px`,\n md: `${validBaseRadius}px`,\n lg: `${\n Number.isFinite(validBaseRadius * 1.5)\n ? Math.round(validBaseRadius * 1.5)\n : 0\n }px`,\n xl: `${\n Number.isFinite(validBaseRadius * 2)\n ? Math.round(validBaseRadius * 2)\n : 0\n }px`,\n full: \"9999px\",\n };\n }\n\n #generateBorderWidthTokens(shapeConfig) {\n const { borderWidth = \"medium\" } = shapeConfig;\n\n // Support string enum keys, numeric values, or default to medium\n let baseBorderWidth;\n if (typeof borderWidth === \"number\") {\n baseBorderWidth = borderWidth;\n } else if (typeof borderWidth === \"string\") {\n baseBorderWidth =\n enums.BorderWidths[borderWidth] ?? enums.BorderWidths.medium;\n } else {\n baseBorderWidth = enums.BorderWidths.medium;\n }\n\n const validBase = Number.isFinite(Number(baseBorderWidth))\n ? Number(baseBorderWidth)\n : enums.BorderWidths.medium;\n // Snap to whole CSS pixels to avoid subpixel border widths that can render\n // identically across browsers/DPIs (e.g. 0.5px and 1.5px both appearing as 1px).\n const toRenderablePx = (value) => `${Math.max(1, Math.ceil(value))}px`;\n\n // Generate a derived border width scale based on configured base width\n return {\n hairline: toRenderablePx(validBase * 0.25),\n thin: toRenderablePx(validBase * 0.5),\n medium: toRenderablePx(validBase),\n thick: toRenderablePx(validBase * 1.5),\n };\n }\n\n generateTypographyTokens(typographyConfig) {\n const {\n fontFamilyHeadings = \"system-ui, -apple-system, sans-serif\",\n fontFamilyBody = \"system-ui, -apple-system, sans-serif\",\n fontFamilyMono = 'ui-monospace, \"Cascadia Code\", \"Source Code Pro\", Menlo, Consolas, monospace',\n baseFontSize = 16,\n fontScale = 1.25, // Use consistent 1.25x minor third ratio\n fontWeightLight = enums.FontWeights.light,\n fontWeightNormal = enums.FontWeights.normal,\n fontWeightMedium = enums.FontWeights.medium,\n fontWeightSemibold = enums.FontWeights.semibold,\n fontWeightBold = enums.FontWeights.bold,\n lineHeightTight = enums.LineHeights.tight,\n lineHeightNormal = enums.LineHeights.normal,\n lineHeightRelaxed = enums.LineHeights.relaxed,\n } = typographyConfig;\n\n // Validate numeric values to prevent NaN\n const validBaseFontSize = Number.isFinite(Number(baseFontSize))\n ? Number(baseFontSize)\n : 16;\n const validFontScale = Number.isFinite(Number(fontScale))\n ? Number(fontScale)\n : 1.25;\n\n return {\n fontFamily: {\n headings: fontFamilyHeadings,\n body: fontFamilyBody,\n mono: fontFamilyMono,\n },\n fontSize: {\n // Consistent modular scale using 1.25 ratio (minor third)\n xs: `${Math.round(validBaseFontSize / Math.pow(validFontScale, 2))}px`, // 16 / 1.25\u00B2 = 10px\n sm: `${Math.round(validBaseFontSize / validFontScale)}px`, // 16 / 1.25 = 13px\n base: `${validBaseFontSize}px`, // 16px\n lg: `${Math.round(validBaseFontSize * validFontScale)}px`, // 16 \u00D7 1.25 = 20px\n xl: `${Math.round(validBaseFontSize * Math.pow(validFontScale, 2))}px`, // 16 \u00D7 1.25\u00B2 = 25px\n \"2xl\": `${Math.round(\n validBaseFontSize * Math.pow(validFontScale, 3),\n )}px`, // 16 \u00D7 1.25\u00B3 = 31px\n \"3xl\": `${Math.round(\n validBaseFontSize * Math.pow(validFontScale, 4),\n )}px`, // 16 \u00D7 1.25\u2074 = 39px\n \"4xl\": `${Math.round(\n validBaseFontSize * Math.pow(validFontScale, 5),\n )}px`, // 16 \u00D7 1.25\u2075 = 49px\n },\n fontWeight: {\n light: fontWeightLight?.toString() || \"300\",\n normal: fontWeightNormal?.toString() || \"400\",\n medium: fontWeightMedium?.toString() || \"500\",\n semibold: fontWeightSemibold?.toString() || \"600\",\n bold: fontWeightBold?.toString() || \"700\",\n },\n lineHeight: {\n tight: lineHeightTight?.toString() || \"1.25\",\n normal: lineHeightNormal?.toString() || \"1.5\",\n relaxed: lineHeightRelaxed?.toString() || \"1.75\",\n },\n };\n }\n\n #generateShadowTokens(layersConfig) {\n const {\n baseShadowOpacity = 0.1,\n shadowBlurMultiplier = 1,\n shadowOffsetMultiplier = 1,\n } = layersConfig;\n\n const shadowColor = `rgba(0, 0, 0, ${baseShadowOpacity})`;\n const lightShadowColor = `rgba(0, 0, 0, ${baseShadowOpacity * 0.5})`;\n\n return {\n sm: `0 ${1 * shadowOffsetMultiplier}px ${\n 2 * shadowBlurMultiplier\n }px 0 ${lightShadowColor}`,\n base: `0 ${1 * shadowOffsetMultiplier}px ${\n 3 * shadowBlurMultiplier\n }px 0 ${shadowColor}, 0 ${1 * shadowOffsetMultiplier}px ${\n 2 * shadowBlurMultiplier\n }px 0 ${lightShadowColor}`,\n md: `0 ${4 * shadowOffsetMultiplier}px ${6 * shadowBlurMultiplier}px ${\n -1 * shadowOffsetMultiplier\n }px ${shadowColor}, 0 ${2 * shadowOffsetMultiplier}px ${\n 4 * shadowBlurMultiplier\n }px ${-1 * shadowOffsetMultiplier}px ${lightShadowColor}`,\n lg: `0 ${10 * shadowOffsetMultiplier}px ${15 * shadowBlurMultiplier}px ${\n -3 * shadowOffsetMultiplier\n }px ${shadowColor}, 0 ${4 * shadowOffsetMultiplier}px ${\n 6 * shadowBlurMultiplier\n }px ${-2 * shadowOffsetMultiplier}px ${lightShadowColor}`,\n xl: `0 ${20 * shadowOffsetMultiplier}px ${25 * shadowBlurMultiplier}px ${\n -5 * shadowOffsetMultiplier\n }px ${shadowColor}, 0 ${10 * shadowOffsetMultiplier}px ${\n 10 * shadowBlurMultiplier\n }px ${-5 * shadowOffsetMultiplier}px ${lightShadowColor}`,\n inner: `inset 0 ${2 * shadowOffsetMultiplier}px ${\n 4 * shadowBlurMultiplier\n }px 0 ${lightShadowColor}`,\n };\n }\n\n #generateLayoutTokens(layoutConfig) {\n const {\n containerPadding = 16,\n breakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n },\n } = layoutConfig;\n\n const hasExplicitMaxWidth =\n this.#hasDefinedConfigValue(layoutConfig, \"maxWidth\");\n\n const explicitMaxWidthValue = layoutConfig.maxWidth;\n\n const resolvedMaxWidths = this.#resolveLayoutMaxWidths(layoutConfig, {\n emitFallbacks: false,\n });\n\n return {\n maxWidth: hasExplicitMaxWidth\n ? this.#formatLength(explicitMaxWidthValue, \"1200px\")\n : undefined,\n maxWidthSm: resolvedMaxWidths.sm,\n maxWidthMd: resolvedMaxWidths.md,\n maxWidthLg: resolvedMaxWidths.lg,\n maxWidthXl: resolvedMaxWidths.xl,\n minHeight: \"100vh\",\n containerPadding: this.#formatLength(containerPadding, \"16px\"),\n breakpoints: {\n sm: this.#formatLength(breakpoints.sm, \"640px\"),\n md: this.#formatLength(breakpoints.md, \"768px\"),\n lg: this.#formatLength(breakpoints.lg, \"1024px\"),\n xl: this.#formatLength(breakpoints.xl, \"1280px\"),\n },\n // Semantic spacing tokens for large layouts\n // Use these instead of numbered spacing beyond --spacing-12\n pageMargin: \"120px\", // For page-level margins\n sectionGap: \"160px\", // Between major page sections\n containerGap: \"200px\", // Between container blocks\n heroSpacing: \"240px\", // For hero/banner areas\n footerSpacing: \"160px\", // Before footer sections\n };\n }\n\n #resolveLayoutMaxWidths(layoutConfig = {}, options = {}) {\n const { emitFallbacks = true } = options;\n const defaultBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n\n const { maxWidths = {}, containerPadding = 16, breakpoints = defaultBreakpoints } =\n layoutConfig || {};\n\n const hasExplicitMaxWidth =\n this.#hasDefinedConfigValue(layoutConfig, \"maxWidth\");\n\n const hasExplicitMaxWidths = [\"sm\", \"md\", \"lg\", \"xl\"].some((key) =>\n this.#hasDefinedConfigValue(maxWidths, key),\n );\n\n if (!emitFallbacks && !hasExplicitMaxWidth && !hasExplicitMaxWidths) {\n return {\n sm: undefined,\n md: undefined,\n lg: undefined,\n xl: undefined,\n };\n }\n\n const maxWidthValue = layoutConfig?.maxWidth;\n\n const paddingValue = this.#toNumber(containerPadding, 16);\n const baseMaxWidth = this.#toNumber(maxWidthValue, defaultBreakpoints.xl);\n\n const resolvedBreakpoints = {\n sm: this.#toNumber(breakpoints.sm, defaultBreakpoints.sm),\n md: this.#toNumber(breakpoints.md, defaultBreakpoints.md),\n lg: this.#toNumber(breakpoints.lg, defaultBreakpoints.lg),\n xl: this.#toNumber(breakpoints.xl, defaultBreakpoints.xl),\n };\n\n const deriveWidth = (bp) => {\n if (!bp) {\n return baseMaxWidth;\n }\n return Math.max(320, bp - paddingValue * 2);\n };\n\n const fallbackWidths = {\n sm: Math.min(baseMaxWidth, deriveWidth(resolvedBreakpoints.sm)),\n md: Math.min(baseMaxWidth, deriveWidth(resolvedBreakpoints.md)),\n lg: Math.min(baseMaxWidth, deriveWidth(resolvedBreakpoints.lg)),\n xl: Math.max(320, baseMaxWidth),\n };\n\n return {\n sm: this.#formatLength(maxWidths.sm, `${fallbackWidths.sm}px`),\n md: this.#formatLength(maxWidths.md, `${fallbackWidths.md}px`),\n lg: this.#formatLength(maxWidths.lg, `${fallbackWidths.lg}px`),\n xl: this.#formatLength(maxWidths.xl, `${fallbackWidths.xl}px`),\n };\n }\n\n #hasDefinedConfigValue(source, key) {\n if (!source || typeof source !== \"object\") return false;\n if (!Object.prototype.hasOwnProperty.call(source, key)) return false;\n const value = source[key];\n if (value === undefined || value === null) return false;\n if (typeof value === \"string\" && value.trim().length === 0) return false;\n return true;\n }\n\n #formatLength(value, fallback) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return `${value}px`;\n }\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n return fallback;\n }\n\n #toNumber(value, fallback) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n const parsed = parseFloat(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n return fallback;\n }\n\n #generateTransitionTokens(behaviorConfig) {\n const {\n transitionSpeed = enums.TransitionSpeeds.normal,\n animationEasing = enums.AnimationEasings[\"ease-out\"],\n } = behaviorConfig;\n\n // Handle both number values and string keys\n let baseSpeed;\n if (typeof transitionSpeed === \"number\") {\n baseSpeed = transitionSpeed;\n } else if (\n typeof transitionSpeed === \"string\" &&\n enums.TransitionSpeeds[transitionSpeed]\n ) {\n baseSpeed = enums.TransitionSpeeds[transitionSpeed];\n } else {\n baseSpeed = enums.TransitionSpeeds.normal;\n }\n\n // Transition variables should only contain duration, not easing\n // This allows specific easing functions to be applied per property\n return {\n fast: `${Math.round(baseSpeed * 0.6)}ms`,\n normal: `${baseSpeed}ms`,\n slow: `${Math.round(baseSpeed * 1.4)}ms`,\n };\n }\n\n #generateZIndexTokens(layersConfig) {\n const { baseZIndex = 1000, zIndexStep = 10 } = layersConfig;\n\n return {\n dropdown: baseZIndex.toString(),\n sticky: (baseZIndex + zIndexStep * 2).toString(),\n fixed: (baseZIndex + zIndexStep * 3).toString(),\n modal: (baseZIndex + zIndexStep * 4).toString(),\n drawer: (baseZIndex + zIndexStep * 5).toString(), // Added drawer token\n popover: (baseZIndex + zIndexStep * 6).toString(),\n tooltip: (baseZIndex + zIndexStep * 7).toString(),\n notification: (baseZIndex + zIndexStep * 8).toString(),\n };\n }\n\n #generateIconTokens(iconConfig) {\n const {\n set = \"phosphor\",\n weight = \"regular\",\n defaultSize = 24,\n sizes = {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 32,\n xl: 48,\n \"2xl\": 64,\n },\n // Default path for dev/demo; static export places it at [static.root]/icons/pds-icons.svg\n spritePath = \"/assets/pds/icons/pds-icons.svg\",\n // Path for on-demand external SVG icons\n externalPath = \"/assets/img/icons/\",\n } = iconConfig;\n\n return {\n set,\n weight,\n defaultSize: `${defaultSize}px`,\n sizes: Object.fromEntries(\n Object.entries(sizes).map(([key, value]) => [key, `${value}px`]),\n ),\n spritePath,\n externalPath,\n };\n }\n\n #generateColorVariables(colors) {\n const chunks = [];\n\n // Header\n chunks.push(` /* Colors */\\n`);\n\n // Recursively emit color variables\n const generateNestedColors = (obj, prefix = \"\") => {\n Object.entries(obj).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n generateNestedColors(value, `${prefix}${key}-`);\n } else if (typeof value === \"string\") {\n chunks.push(` --color-${prefix}${key}: ${value};\\n`);\n }\n });\n };\n\n Object.entries(colors).forEach(([category, values]) => {\n if (category === \"dark\") return; // handled elsewhere\n if (category === \"surfaceSmart\") return; // handled below\n if (category === \"interactive\") return; // handled below with semantic tokens\n if (category === \"accentInteractive\") return;\n if (category === \"dangerInteractive\") return;\n if (category === \"successInteractive\") return;\n if (category === \"warningInteractive\") return;\n if (category === \"infoInteractive\") return;\n if (category === \"surfaceAccent\") return;\n if (category === \"surfaceStatus\") return;\n if (typeof values === \"object\" && values !== null) {\n generateNestedColors(values, `${category}-`);\n }\n });\n\n // Smart surface tokens\n if (colors.surfaceSmart) {\n chunks.push(` /* Smart Surface Tokens (context-aware) */\\n`);\n Object.entries(colors.surfaceSmart).forEach(([surfaceKey, tokens]) => {\n chunks.push(` --surface-${surfaceKey}-bg: ${tokens.bg};\\n`);\n chunks.push(` --surface-${surfaceKey}-text: ${tokens.text};\\n`);\n chunks.push(\n ` --surface-${surfaceKey}-text-secondary: ${tokens.textSecondary};\\n`,\n );\n chunks.push(\n ` --surface-${surfaceKey}-text-muted: ${tokens.textMuted};\\n`,\n );\n chunks.push(` --surface-${surfaceKey}-icon: ${tokens.icon};\\n`);\n chunks.push(\n ` --surface-${surfaceKey}-icon-subtle: ${tokens.iconSubtle};\\n`,\n );\n chunks.push(` --surface-${surfaceKey}-shadow: ${tokens.shadow};\\n`);\n chunks.push(` --surface-${surfaceKey}-border: ${tokens.border};\\n`);\n });\n chunks.push(`\\n`);\n }\n\n // Semantic text colors (light mode)\n chunks.push(` /* Semantic Text Colors */\\n`);\n chunks.push(` --color-text-primary: var(--color-gray-900);\\n`);\n chunks.push(` --color-text-secondary: var(--color-gray-600);\\n`);\n chunks.push(` --color-text-muted: var(--color-gray-500);\\n`);\n chunks.push(` --color-border: var(--color-gray-300);\\n`);\n chunks.push(` --color-input-bg: var(--color-surface-base);\\n`);\n chunks.push(` --color-input-disabled-bg: var(--color-gray-50);\\n`);\n chunks.push(` --color-input-disabled-text: var(--color-gray-500);\\n`);\n chunks.push(` --color-code-bg: var(--color-gray-100);\\n`);\n\n // Interactive color tokens - separate shades for different purposes (light mode)\n if (colors.interactive && colors.interactive.light) {\n chunks.push(\n ` /* Interactive Colors - optimized for specific use cases */\\n`,\n );\n chunks.push(\n ` --color-primary-fill: ${colors.interactive.light.fill}; /* For button backgrounds with white text */\\n`,\n );\n chunks.push(\n ` --color-primary-fill-hover: ${colors.interactive.light.fillHover};\\n`,\n );\n chunks.push(\n ` --color-primary-fill-active: ${colors.interactive.light.fillActive};\\n`,\n );\n chunks.push(\n ` --color-primary-text: ${colors.interactive.light.text}; /* For links and outline buttons on light surfaces */\\n`,\n );\n chunks.push(\n ` --color-primary-text-hover: ${colors.interactive.light.textHover};\\n`,\n );\n chunks.push(\n ` --color-primary-text-visited: ${colors.interactive.light.textVisited};\\n`,\n );\n chunks.push(\n ` --color-primary-contrast: ${colors.interactive.light.contrast};\\n`,\n );\n chunks.push(\n ` --color-focus-ring: ${colors.interactive.light.focusRing};\\n`,\n );\n chunks.push(\n ` --color-selection-bg: ${colors.interactive.light.selectionBg};\\n`,\n );\n chunks.push(\n ` --color-selection-text: ${colors.interactive.light.selectionText};\\n`,\n );\n chunks.push(` --color-link: var(--color-primary-text);\\n`);\n chunks.push(` --color-link-hover: var(--color-primary-text-hover);\\n`);\n chunks.push(` --color-link-visited: var(--color-primary-text-visited);\\n`);\n }\n\n if (colors.accentInteractive?.light) {\n chunks.push(` /* Accent Role Colors */\\n`);\n chunks.push(\n ` --color-accent-fill: ${colors.accentInteractive.light.fill};\\n`,\n );\n chunks.push(\n ` --color-accent-fill-hover: ${colors.accentInteractive.light.fillHover};\\n`,\n );\n chunks.push(\n ` --color-accent-fill-active: ${colors.accentInteractive.light.fillActive};\\n`,\n );\n chunks.push(\n ` --color-accent-text: ${colors.accentInteractive.light.text};\\n`,\n );\n chunks.push(\n ` --color-accent-text-hover: ${colors.accentInteractive.light.textHover};\\n`,\n );\n }\n\n if (colors.surfaceAccent?.light) {\n chunks.push(` /* Surface-Aware Accent Text Tokens */\\n`);\n Object.entries(colors.surfaceAccent.light).forEach(([surfaceKey, role]) => {\n chunks.push(` --surface-${surfaceKey}-accent-text: ${role.text};\\n`);\n chunks.push(\n ` --surface-${surfaceKey}-accent-text-hover: ${role.textHover};\\n`,\n );\n });\n }\n\n if (colors.dangerInteractive?.light) {\n chunks.push(` /* Danger Role Colors */\\n`);\n chunks.push(` --color-danger-fill: ${colors.dangerInteractive.light.fill};\\n`);\n chunks.push(` --color-danger-fill-hover: ${colors.dangerInteractive.light.fillHover};\\n`);\n chunks.push(` --color-danger-fill-active: ${colors.dangerInteractive.light.fillActive};\\n`);\n chunks.push(` --color-danger-text: ${colors.dangerInteractive.light.text};\\n`);\n chunks.push(` --color-danger-text-hover: ${colors.dangerInteractive.light.textHover};\\n`);\n chunks.push(` --color-danger-contrast: ${colors.dangerInteractive.light.contrast};\\n`);\n }\n\n if (colors.successInteractive?.light) {\n chunks.push(` /* Success Role Colors */\\n`);\n chunks.push(` --color-success-fill: ${colors.successInteractive.light.fill};\\n`);\n chunks.push(` --color-success-fill-hover: ${colors.successInteractive.light.fillHover};\\n`);\n chunks.push(` --color-success-fill-active: ${colors.successInteractive.light.fillActive};\\n`);\n chunks.push(` --color-success-text: ${colors.successInteractive.light.text};\\n`);\n chunks.push(` --color-success-text-hover: ${colors.successInteractive.light.textHover};\\n`);\n chunks.push(` --color-success-contrast: ${colors.successInteractive.light.contrast};\\n`);\n }\n\n if (colors.warningInteractive?.light) {\n chunks.push(` /* Warning Role Colors */\\n`);\n chunks.push(` --color-warning-fill: ${colors.warningInteractive.light.fill};\\n`);\n chunks.push(` --color-warning-fill-hover: ${colors.warningInteractive.light.fillHover};\\n`);\n chunks.push(` --color-warning-fill-active: ${colors.warningInteractive.light.fillActive};\\n`);\n chunks.push(` --color-warning-text: ${colors.warningInteractive.light.text};\\n`);\n chunks.push(` --color-warning-text-hover: ${colors.warningInteractive.light.textHover};\\n`);\n chunks.push(` --color-warning-contrast: ${colors.warningInteractive.light.contrast};\\n`);\n }\n\n if (colors.infoInteractive?.light) {\n chunks.push(` /* Info Role Colors */\\n`);\n chunks.push(` --color-info-fill: ${colors.infoInteractive.light.fill};\\n`);\n chunks.push(` --color-info-fill-hover: ${colors.infoInteractive.light.fillHover};\\n`);\n chunks.push(` --color-info-fill-active: ${colors.infoInteractive.light.fillActive};\\n`);\n chunks.push(` --color-info-text: ${colors.infoInteractive.light.text};\\n`);\n chunks.push(` --color-info-text-hover: ${colors.infoInteractive.light.textHover};\\n`);\n chunks.push(` --color-info-contrast: ${colors.infoInteractive.light.contrast};\\n`);\n }\n\n if (colors.surfaceStatus?.light) {\n chunks.push(` /* Surface-Aware Status Text Tokens */\\n`);\n Object.entries(colors.surfaceStatus.light).forEach(([family, roleBySurface]) => {\n Object.entries(roleBySurface).forEach(([surfaceKey, role]) => {\n chunks.push(` --surface-${surfaceKey}-${family}-text: ${role.text};\\n`);\n chunks.push(` --surface-${surfaceKey}-${family}-text-hover: ${role.textHover};\\n`);\n });\n });\n }\n\n // Callout display tokens \u2014 theme-aware shade aliases for callout bg/border/text.\n // Dark mode overrides these in the dark variables section.\n chunks.push(` /* Semantic Callout Display Tokens */\\n`);\n for (const family of ['success', 'info', 'warning', 'danger']) {\n chunks.push(` --color-${family}-display-bg: var(--color-${family}-50);\\n`);\n chunks.push(` --color-${family}-display-border: var(--color-${family}-600);\\n`);\n chunks.push(` --color-${family}-display-text: var(--color-${family}-900);\\n`);\n }\n\n // Translucent surface tokens\n chunks.push(` /* Translucent Surface Tokens */\\n`);\n chunks.push(\n ` --color-surface-translucent-25: color-mix(in oklab, var(--color-surface-subtle) 25%, transparent 75%);\\n`,\n );\n chunks.push(\n ` --color-surface-translucent-50: color-mix(in oklab, var(--color-surface-subtle) 50%, transparent 50%);\\n`,\n );\n chunks.push(\n ` --color-surface-translucent-75: color-mix(in oklab, var(--color-surface-subtle) 75%, transparent 25%);\\n`,\n );\n\n // Backdrop tokens (light mode)\n chunks.push(\n ` /* Backdrop tokens - used for modal dialogs, drawers, overlays */\\n\\n --backdrop-bg: linear-gradient(\\n 135deg,\\n rgba(255, 255, 255, 0.2),\\n rgba(255, 255, 255, 0.1)\\n );\\n --backdrop-blur: 10px;\\n --backdrop-saturate: 150%;\\n --backdrop-brightness: 0.9;\\n --backdrop-filter: blur(var(--backdrop-blur)) saturate(var(--backdrop-saturate)) brightness(var(--backdrop-brightness));\\n --backdrop-opacity: 1;\\n \\n /* Legacy alias for backwards compatibility */\\n --backdrop-background: var(--backdrop-bg);\\n `,\n );\n\n // Mesh gradients\n chunks.push(this.#generateMeshGradients(colors));\n\n return `${chunks.join(\"\")}\\n`;\n }\n\n #generateMeshGradients(colors) {\n // Create subtle mesh gradients using color palette\n const primary = colors.primary?.[500] || \"#3b82f6\";\n const secondary = colors.secondary?.[500] || \"#8b5cf6\";\n const accent = colors.accent?.[500] || \"#f59e0b\";\n\n return /*css*/ `\n /* Mesh Gradient Backgrounds */\n --background-mesh-01: radial-gradient(at 27% 37%, color-mix(in oklab, ${primary} 25%, transparent) 0px, transparent 50%),\n radial-gradient(at 97% 21%, color-mix(in oklab, ${secondary} 22%, transparent) 0px, transparent 50%),\n radial-gradient(at 52% 99%, color-mix(in oklab, ${accent} 18%, transparent) 0px, transparent 50%),\n radial-gradient(at 10% 29%, color-mix(in oklab, ${primary} 15%, transparent) 0px, transparent 50%);\n \n --background-mesh-02: radial-gradient(at 40% 20%, color-mix(in oklab, ${secondary} 24%, transparent) 0px, transparent 50%),\n radial-gradient(at 80% 0%, color-mix(in oklab, ${primary} 20%, transparent) 0px, transparent 50%),\n radial-gradient(at 0% 50%, color-mix(in oklab, ${accent} 17%, transparent) 0px, transparent 50%),\n radial-gradient(at 80% 100%, color-mix(in oklab, ${secondary} 15%, transparent) 0px, transparent 50%);\n \n --background-mesh-03: radial-gradient(at 15% 50%, color-mix(in oklab, ${accent} 21%, transparent) 0px, transparent 50%),\n radial-gradient(at 85% 30%, color-mix(in oklab, ${primary} 23%, transparent) 0px, transparent 50%),\n radial-gradient(at 50% 80%, color-mix(in oklab, ${secondary} 18%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 90%, color-mix(in oklab, ${accent} 16%, transparent) 0px, transparent 50%);\n \n --background-mesh-04: radial-gradient(at 70% 15%, color-mix(in oklab, ${primary} 19%, transparent) 0px, transparent 50%),\n radial-gradient(at 20% 80%, color-mix(in oklab, ${secondary} 22%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 60%, color-mix(in oklab, ${accent} 17%, transparent) 0px, transparent 50%),\n radial-gradient(at 30% 40%, color-mix(in oklab, ${primary} 16%, transparent) 0px, transparent 50%);\n \n --background-mesh-05: radial-gradient(at 50% 50%, color-mix(in oklab, ${primary} 23%, transparent) 0px, transparent 50%),\n radial-gradient(at 10% 10%, color-mix(in oklab, ${accent} 20%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 10%, color-mix(in oklab, ${secondary} 18%, transparent) 0px, transparent 50%),\n radial-gradient(at 50% 90%, color-mix(in oklab, ${accent} 15%, transparent) 0px, transparent 50%);\n `;\n }\n\n #generateSpacingVariables(spacing) {\n const lines = [\" /* Spacing */\\n\"];\n Object.entries(spacing).forEach(([key, value]) => {\n // Validate the key and value before generating CSS\n if (\n key !== null &&\n key !== undefined &&\n key !== \"NaN\" &&\n value !== undefined &&\n !value.includes(\"NaN\")\n ) {\n lines.push(` --spacing-${key}: ${value};\\n`);\n }\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateRadiusVariables(radius) {\n const lines = [\" /* Border Radius */\\n\"];\n Object.entries(radius).forEach(([key, value]) => {\n lines.push(` --radius-${key}: ${value};\\n`);\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateBorderWidthVariables(borderWidths) {\n const lines = [\" /* Border Widths */\\n\"];\n Object.entries(borderWidths).forEach(([key, value]) => {\n lines.push(` --border-width-${key}: ${value};\\n`);\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateTypographyVariables(typography) {\n const lines = [\" /* Typography */\\n\"];\n Object.entries(typography).forEach(([category, values]) => {\n // Remove \"font\" prefix from category names and convert to kebab-case\n // fontFamily -> family, fontSize -> size, fontWeight -> weight, lineHeight -> line-height\n const cleanCategory = category\n .replace(/^font/, \"\")\n .replace(/^(.)/, (m) => m.toLowerCase())\n .replace(/([A-Z])/g, \"-$1\")\n .toLowerCase();\n\n Object.entries(values).forEach(([key, value]) => {\n // Convert camelCase keys to kebab-case\n const kebabKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n lines.push(` --font-${cleanCategory}-${kebabKey}: ${value};\\n`);\n });\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateShadowVariables(shadows) {\n const lines = [\" /* Shadows */\\n\"];\n Object.entries(shadows).forEach(([key, value]) => {\n lines.push(` --shadow-${key}: ${value};\\n`);\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateLayoutVariables(layout) {\n const lines = [\" /* Layout */\\n\"];\n Object.entries(layout).forEach(([key, value]) => {\n // Convert camelCase keys to kebab-case\n const kebabKey = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n\n if (value === undefined || value === null) {\n return;\n }\n\n // Skip breakpoints object - it's used in JS but doesn't belong in CSS variables\n // Breakpoints are used in @media queries, not as CSS custom properties\n if (key === \"breakpoints\") {\n return;\n }\n\n lines.push(` --layout-${kebabKey}: ${value};\\n`);\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateTransitionVariables(transitions) {\n const lines = [\" /* Transitions */\\n\"];\n Object.entries(transitions).forEach(([key, value]) => {\n lines.push(` --transition-${key}: ${value};\\n`);\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateZIndexVariables(zIndex) {\n const lines = [\" /* Z-Index */\\n\"];\n Object.entries(zIndex).forEach(([key, value]) => {\n lines.push(` --z-${key}: ${value};\\n`);\n });\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateIconVariables(icons) {\n const lines = [\" /* Icon System */\\n\"];\n lines.push(` --icon-set: ${icons.set};\\n`);\n lines.push(` --icon-weight: ${icons.weight};\\n`);\n lines.push(` --icon-size: ${icons.defaultSize};\\n`);\n\n // Icon size scale\n Object.entries(icons.sizes).forEach(([key, value]) => {\n lines.push(` --icon-size-${key}: ${value};\\n`);\n });\n\n return `${lines.join(\"\")}\\n`;\n }\n\n #generateDarkVariablesOnly(colors, darkShadows) {\n if (!colors?.dark) return \"\";\n\n const varLines = [];\n const generateNested = (obj, prefix = \"\") => {\n Object.entries(obj).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n generateNested(value, `${prefix}${key}-`);\n } else if (typeof value === \"string\") {\n varLines.push(` --color-${prefix}${key}: ${value};\\n`);\n }\n });\n };\n\n Object.entries(colors.dark).forEach(([category, values]) => {\n if (category === \"surfaceSmart\") return;\n if (typeof values === \"object\" && values !== null) {\n generateNested(values, `${category}-`);\n }\n });\n\n // Smart surface tokens\n const smartLines = [];\n if (colors.dark.surfaceSmart) {\n smartLines.push(\n ` /* Smart Surface Tokens (dark mode, context-aware) */\\n`,\n );\n Object.entries(colors.dark.surfaceSmart).forEach(\n ([surfaceKey, tokens]) => {\n smartLines.push(` --surface-${surfaceKey}-bg: ${tokens.bg};\\n`);\n smartLines.push(` --surface-${surfaceKey}-text: ${tokens.text};\\n`);\n smartLines.push(\n ` --surface-${surfaceKey}-text-secondary: ${tokens.textSecondary};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-text-muted: ${tokens.textMuted};\\n`,\n );\n smartLines.push(` --surface-${surfaceKey}-icon: ${tokens.icon};\\n`);\n smartLines.push(\n ` --surface-${surfaceKey}-icon-subtle: ${tokens.iconSubtle};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-shadow: ${tokens.shadow};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-border: ${tokens.border};\\n`,\n );\n },\n );\n smartLines.push(`\\n`);\n }\n\n const interactiveLines = [];\n if (colors.interactive?.dark) {\n interactiveLines.push(\n ` /* Interactive Colors - optimized for specific use cases (dark mode) */\\n`,\n );\n interactiveLines.push(\n ` --color-primary-fill: ${colors.interactive.dark.fill};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-fill-hover: ${colors.interactive.dark.fillHover};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-fill-active: ${colors.interactive.dark.fillActive};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-text: ${colors.interactive.dark.text};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-text-hover: ${colors.interactive.dark.textHover};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-text-visited: ${colors.interactive.dark.textVisited};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-contrast: ${colors.interactive.dark.contrast};\\n`,\n );\n interactiveLines.push(\n ` --color-focus-ring: ${colors.interactive.dark.focusRing};\\n`,\n );\n interactiveLines.push(\n ` --color-selection-bg: ${colors.interactive.dark.selectionBg};\\n`,\n );\n interactiveLines.push(\n ` --color-selection-text: ${colors.interactive.dark.selectionText};\\n`,\n );\n interactiveLines.push(` --color-link: var(--color-primary-text);\\n`);\n interactiveLines.push(` --color-link-hover: var(--color-primary-text-hover);\\n`);\n interactiveLines.push(` --color-link-visited: var(--color-primary-text-visited);\\n`);\n }\n\n const accentLines = [];\n if (colors.accentInteractive?.dark) {\n accentLines.push(` /* Accent Role Colors (dark mode) */\\n`);\n accentLines.push(\n ` --color-accent-fill: ${colors.accentInteractive.dark.fill};\\n`,\n );\n accentLines.push(\n ` --color-accent-fill-hover: ${colors.accentInteractive.dark.fillHover};\\n`,\n );\n accentLines.push(\n ` --color-accent-fill-active: ${colors.accentInteractive.dark.fillActive};\\n`,\n );\n accentLines.push(\n ` --color-accent-text: ${colors.accentInteractive.dark.text};\\n`,\n );\n accentLines.push(\n ` --color-accent-text-hover: ${colors.accentInteractive.dark.textHover};\\n`,\n );\n }\n\n const surfaceAccentLines = [];\n if (colors.surfaceAccent?.dark) {\n surfaceAccentLines.push(` /* Surface-Aware Accent Text Tokens (dark mode) */\\n`);\n Object.entries(colors.surfaceAccent.dark).forEach(([surfaceKey, role]) => {\n surfaceAccentLines.push(\n ` --surface-${surfaceKey}-accent-text: ${role.text};\\n`,\n );\n surfaceAccentLines.push(\n ` --surface-${surfaceKey}-accent-text-hover: ${role.textHover};\\n`,\n );\n });\n }\n\n const dangerLines = [];\n if (colors.dangerInteractive?.dark) {\n dangerLines.push(` /* Danger Role Colors (dark mode) */\\n`);\n dangerLines.push(` --color-danger-fill: ${colors.dangerInteractive.dark.fill};\\n`);\n dangerLines.push(` --color-danger-fill-hover: ${colors.dangerInteractive.dark.fillHover};\\n`);\n dangerLines.push(` --color-danger-fill-active: ${colors.dangerInteractive.dark.fillActive};\\n`);\n dangerLines.push(` --color-danger-text: ${colors.dangerInteractive.dark.text};\\n`);\n dangerLines.push(` --color-danger-text-hover: ${colors.dangerInteractive.dark.textHover};\\n`);\n dangerLines.push(` --color-danger-contrast: ${colors.dangerInteractive.dark.contrast};\\n`);\n }\n\n const successLines = [];\n if (colors.successInteractive?.dark) {\n successLines.push(` /* Success Role Colors (dark mode) */\\n`);\n successLines.push(` --color-success-fill: ${colors.successInteractive.dark.fill};\\n`);\n successLines.push(` --color-success-fill-hover: ${colors.successInteractive.dark.fillHover};\\n`);\n successLines.push(` --color-success-fill-active: ${colors.successInteractive.dark.fillActive};\\n`);\n successLines.push(` --color-success-text: ${colors.successInteractive.dark.text};\\n`);\n successLines.push(` --color-success-text-hover: ${colors.successInteractive.dark.textHover};\\n`);\n successLines.push(` --color-success-contrast: ${colors.successInteractive.dark.contrast};\\n`);\n }\n\n const warningLines = [];\n if (colors.warningInteractive?.dark) {\n warningLines.push(` /* Warning Role Colors (dark mode) */\\n`);\n warningLines.push(` --color-warning-fill: ${colors.warningInteractive.dark.fill};\\n`);\n warningLines.push(` --color-warning-fill-hover: ${colors.warningInteractive.dark.fillHover};\\n`);\n warningLines.push(` --color-warning-fill-active: ${colors.warningInteractive.dark.fillActive};\\n`);\n warningLines.push(` --color-warning-text: ${colors.warningInteractive.dark.text};\\n`);\n warningLines.push(` --color-warning-text-hover: ${colors.warningInteractive.dark.textHover};\\n`);\n warningLines.push(` --color-warning-contrast: ${colors.warningInteractive.dark.contrast};\\n`);\n }\n\n const infoLines = [];\n if (colors.infoInteractive?.dark) {\n infoLines.push(` /* Info Role Colors (dark mode) */\\n`);\n infoLines.push(` --color-info-fill: ${colors.infoInteractive.dark.fill};\\n`);\n infoLines.push(` --color-info-fill-hover: ${colors.infoInteractive.dark.fillHover};\\n`);\n infoLines.push(` --color-info-fill-active: ${colors.infoInteractive.dark.fillActive};\\n`);\n infoLines.push(` --color-info-text: ${colors.infoInteractive.dark.text};\\n`);\n infoLines.push(` --color-info-text-hover: ${colors.infoInteractive.dark.textHover};\\n`);\n infoLines.push(` --color-info-contrast: ${colors.infoInteractive.dark.contrast};\\n`);\n }\n\n const surfaceStatusLines = [];\n if (colors.surfaceStatus?.dark) {\n surfaceStatusLines.push(` /* Surface-Aware Status Text Tokens (dark mode) */\\n`);\n Object.entries(colors.surfaceStatus.dark).forEach(([family, roleBySurface]) => {\n Object.entries(roleBySurface).forEach(([surfaceKey, role]) => {\n surfaceStatusLines.push(` --surface-${surfaceKey}-${family}-text: ${role.text};\\n`);\n surfaceStatusLines.push(` --surface-${surfaceKey}-${family}-text-hover: ${role.textHover};\\n`);\n });\n });\n }\n\n // Callout display token overrides for dark mode.\n // Use color-mix() to create a subtle hue-tinted surface (adapts to any dark bg),\n // a visible medium-bright border, and light text \u2014 no hard shade guessing needed.\n const calloutDisplayLines = [` /* Semantic Callout Display Tokens (dark mode) */\\n`];\n for (const family of ['success', 'info', 'warning', 'danger']) {\n calloutDisplayLines.push(` --color-${family}-display-bg: color-mix(in oklab, var(--color-${family}-400) 12%, var(--color-surface-base));\\n`);\n calloutDisplayLines.push(` --color-${family}-display-border: var(--color-${family}-400);\\n`);\n calloutDisplayLines.push(` --color-${family}-display-text: var(--color-${family}-100);\\n`);\n }\n\n const semantic = ` --color-text-primary: var(--color-gray-100);\\n --color-text-secondary: var(--color-gray-300);\\n --color-text-muted: var(--color-gray-500);\\n --color-border: var(--color-gray-700);\\n --color-input-bg: var(--color-gray-800);\\n --color-input-disabled-bg: var(--color-gray-900);\\n --color-input-disabled-text: var(--color-gray-600);\\n --color-code-bg: var(--color-gray-800);\\n`;\n\n const backdrop = ` /* Backdrop tokens - dark mode */\\n --backdrop-bg: linear-gradient(\\n 135deg,\\n rgba(0, 0, 0, 0.6),\\n rgba(0, 0, 0, 0.4)\\n );\\n --backdrop-blur: 10px;\\n --backdrop-saturate: 120%;\\n --backdrop-brightness: 0.7;\\n --backdrop-filter: blur(var(--backdrop-blur)) saturate(var(--backdrop-saturate)) brightness(var(--backdrop-brightness));\\n --backdrop-opacity: 1;\\n \\n /* Legacy alias for backwards compatibility */\\n --backdrop-background: var(--backdrop-bg);\\n`;\n\n const mesh = this.#generateMeshGradientsDark(colors);\n const shadowLines = darkShadows\n ? [this.#generateShadowVariables(darkShadows)]\n : [];\n\n // Return ONLY variables, no component rules\n const body = [\n ...varLines,\n ...smartLines,\n ...shadowLines,\n semantic,\n ...interactiveLines,\n ...accentLines,\n ...surfaceAccentLines,\n ...dangerLines,\n ...successLines,\n ...warningLines,\n ...infoLines,\n ...surfaceStatusLines,\n ...calloutDisplayLines,\n backdrop,\n mesh,\n ].join(\"\");\n\n // Dark mode selector only - .surface-inverse is handled separately in utilities\n // to avoid inheriting the full dark palette (which would override --color-surface-inverse)\n return `html[data-theme=\"dark\"] {\\n${body}}\\n`;\n }\n\n // Generate ONLY dark mode variables for the tokens layer (no wrapper, no component rules)\n #generateDarkVariablesForTokensLayer(colors, darkShadows) {\n if (!colors?.dark) return \"\";\n\n const varLines = [];\n const generateNested = (obj, prefix = \"\") => {\n Object.entries(obj).forEach(([key, value]) => {\n if (typeof value === \"object\" && value !== null) {\n generateNested(value, `${prefix}${key}-`);\n } else if (typeof value === \"string\") {\n varLines.push(` --color-${prefix}${key}: ${value};\\n`);\n }\n });\n };\n\n Object.entries(colors.dark).forEach(([category, values]) => {\n if (category === \"surfaceSmart\") return;\n if (typeof values === \"object\" && values !== null) {\n generateNested(values, `${category}-`);\n }\n });\n\n // Smart surface tokens\n const smartLines = [];\n if (colors.dark.surfaceSmart) {\n smartLines.push(\n ` /* Smart Surface Tokens (dark mode, context-aware) */\\n`,\n );\n Object.entries(colors.dark.surfaceSmart).forEach(\n ([surfaceKey, tokens]) => {\n smartLines.push(` --surface-${surfaceKey}-bg: ${tokens.bg};\\n`);\n smartLines.push(\n ` --surface-${surfaceKey}-text: ${tokens.text};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-text-secondary: ${tokens.textSecondary};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-text-muted: ${tokens.textMuted};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-icon: ${tokens.icon};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-icon-subtle: ${tokens.iconSubtle};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-shadow: ${tokens.shadow};\\n`,\n );\n smartLines.push(\n ` --surface-${surfaceKey}-border: ${tokens.border};\\n`,\n );\n },\n );\n smartLines.push(`\\n`);\n }\n\n // Interactive dark mode tokens\n const interactiveLines = [];\n if (colors.interactive && colors.interactive.dark) {\n interactiveLines.push(\n ` /* Interactive Colors - optimized for specific use cases (dark mode) */\\n`,\n );\n interactiveLines.push(\n ` --color-primary-fill: ${colors.interactive.dark.fill};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-fill-hover: ${colors.interactive.dark.fillHover};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-fill-active: ${colors.interactive.dark.fillActive};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-text: ${colors.interactive.dark.text};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-text-hover: ${colors.interactive.dark.textHover};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-text-visited: ${colors.interactive.dark.textVisited};\\n`,\n );\n interactiveLines.push(\n ` --color-primary-contrast: ${colors.interactive.dark.contrast};\\n`,\n );\n interactiveLines.push(\n ` --color-focus-ring: ${colors.interactive.dark.focusRing};\\n`,\n );\n interactiveLines.push(\n ` --color-selection-bg: ${colors.interactive.dark.selectionBg};\\n`,\n );\n interactiveLines.push(\n ` --color-selection-text: ${colors.interactive.dark.selectionText};\\n`,\n );\n interactiveLines.push(` --color-link: var(--color-primary-text);\\n`);\n interactiveLines.push(` --color-link-hover: var(--color-primary-text-hover);\\n`);\n interactiveLines.push(` --color-link-visited: var(--color-primary-text-visited);\\n`);\n }\n\n const accentLines = [];\n if (colors.accentInteractive?.dark) {\n accentLines.push(` /* Accent Role Colors (dark mode) */\\n`);\n accentLines.push(\n ` --color-accent-fill: ${colors.accentInteractive.dark.fill};\\n`,\n );\n accentLines.push(\n ` --color-accent-fill-hover: ${colors.accentInteractive.dark.fillHover};\\n`,\n );\n accentLines.push(\n ` --color-accent-fill-active: ${colors.accentInteractive.dark.fillActive};\\n`,\n );\n accentLines.push(\n ` --color-accent-text: ${colors.accentInteractive.dark.text};\\n`,\n );\n accentLines.push(\n ` --color-accent-text-hover: ${colors.accentInteractive.dark.textHover};\\n`,\n );\n }\n\n const surfaceAccentLines = [];\n if (colors.surfaceAccent?.dark) {\n surfaceAccentLines.push(\n ` /* Surface-Aware Accent Text Tokens (dark mode) */\\n`,\n );\n Object.entries(colors.surfaceAccent.dark).forEach(([surfaceKey, role]) => {\n surfaceAccentLines.push(\n ` --surface-${surfaceKey}-accent-text: ${role.text};\\n`,\n );\n surfaceAccentLines.push(\n ` --surface-${surfaceKey}-accent-text-hover: ${role.textHover};\\n`,\n );\n });\n }\n\n const dangerLines2 = [];\n if (colors.dangerInteractive?.dark) {\n dangerLines2.push(` /* Danger Role Colors (dark mode) */\\n`);\n dangerLines2.push(` --color-danger-fill: ${colors.dangerInteractive.dark.fill};\\n`);\n dangerLines2.push(` --color-danger-fill-hover: ${colors.dangerInteractive.dark.fillHover};\\n`);\n dangerLines2.push(` --color-danger-fill-active: ${colors.dangerInteractive.dark.fillActive};\\n`);\n dangerLines2.push(` --color-danger-text: ${colors.dangerInteractive.dark.text};\\n`);\n dangerLines2.push(` --color-danger-text-hover: ${colors.dangerInteractive.dark.textHover};\\n`);\n dangerLines2.push(` --color-danger-contrast: ${colors.dangerInteractive.dark.contrast};\\n`);\n }\n\n const successLines2 = [];\n if (colors.successInteractive?.dark) {\n successLines2.push(` /* Success Role Colors (dark mode) */\\n`);\n successLines2.push(` --color-success-fill: ${colors.successInteractive.dark.fill};\\n`);\n successLines2.push(` --color-success-fill-hover: ${colors.successInteractive.dark.fillHover};\\n`);\n successLines2.push(` --color-success-fill-active: ${colors.successInteractive.dark.fillActive};\\n`);\n successLines2.push(` --color-success-text: ${colors.successInteractive.dark.text};\\n`);\n successLines2.push(` --color-success-text-hover: ${colors.successInteractive.dark.textHover};\\n`);\n successLines2.push(` --color-success-contrast: ${colors.successInteractive.dark.contrast};\\n`);\n }\n\n const warningLines2 = [];\n if (colors.warningInteractive?.dark) {\n warningLines2.push(` /* Warning Role Colors (dark mode) */\\n`);\n warningLines2.push(` --color-warning-fill: ${colors.warningInteractive.dark.fill};\\n`);\n warningLines2.push(` --color-warning-fill-hover: ${colors.warningInteractive.dark.fillHover};\\n`);\n warningLines2.push(` --color-warning-fill-active: ${colors.warningInteractive.dark.fillActive};\\n`);\n warningLines2.push(` --color-warning-text: ${colors.warningInteractive.dark.text};\\n`);\n warningLines2.push(` --color-warning-text-hover: ${colors.warningInteractive.dark.textHover};\\n`);\n warningLines2.push(` --color-warning-contrast: ${colors.warningInteractive.dark.contrast};\\n`);\n }\n\n const infoLines2 = [];\n if (colors.infoInteractive?.dark) {\n infoLines2.push(` /* Info Role Colors (dark mode) */\\n`);\n infoLines2.push(` --color-info-fill: ${colors.infoInteractive.dark.fill};\\n`);\n infoLines2.push(` --color-info-fill-hover: ${colors.infoInteractive.dark.fillHover};\\n`);\n infoLines2.push(` --color-info-fill-active: ${colors.infoInteractive.dark.fillActive};\\n`);\n infoLines2.push(` --color-info-text: ${colors.infoInteractive.dark.text};\\n`);\n infoLines2.push(` --color-info-text-hover: ${colors.infoInteractive.dark.textHover};\\n`);\n infoLines2.push(` --color-info-contrast: ${colors.infoInteractive.dark.contrast};\\n`);\n }\n\n const surfaceStatusLines2 = [];\n if (colors.surfaceStatus?.dark) {\n surfaceStatusLines2.push(` /* Surface-Aware Status Text Tokens (dark mode) */\\n`);\n Object.entries(colors.surfaceStatus.dark).forEach(([family, roleBySurface]) => {\n Object.entries(roleBySurface).forEach(([surfaceKey, role]) => {\n surfaceStatusLines2.push(` --surface-${surfaceKey}-${family}-text: ${role.text};\\n`);\n surfaceStatusLines2.push(` --surface-${surfaceKey}-${family}-text-hover: ${role.textHover};\\n`);\n });\n });\n }\n\n const calloutDisplayLines2 = [` /* Semantic Callout Display Tokens (dark mode) */\\n`];\n for (const family of ['success', 'info', 'warning', 'danger']) {\n calloutDisplayLines2.push(` --color-${family}-display-bg: color-mix(in oklab, var(--color-${family}-400) 12%, var(--color-surface-base));\\n`);\n calloutDisplayLines2.push(` --color-${family}-display-border: var(--color-${family}-400);\\n`);\n calloutDisplayLines2.push(` --color-${family}-display-text: var(--color-${family}-100);\\n`);\n }\n\n const semantic = [\n ` --color-text-primary: var(--color-gray-100);\\n`,\n ` --color-text-secondary: var(--color-gray-300);\\n`,\n ` --color-text-muted: var(--color-gray-500);\\n`,\n ` --color-border: var(--color-gray-700);\\n`,\n ` --color-input-bg: var(--color-gray-800);\\n`,\n ` --color-input-disabled-bg: var(--color-gray-900);\\n`,\n ` --color-input-disabled-text: var(--color-gray-600);\\n`,\n ` --color-code-bg: var(--color-gray-800);\\n`,\n ...interactiveLines,\n ].join(\"\");\n\n const backdrop = ` /* Backdrop tokens - dark mode */\\n --backdrop-bg: linear-gradient(\\n 135deg,\\n rgba(0, 0, 0, 0.6),\\n rgba(0, 0, 0, 0.4)\\n );\\n --backdrop-blur: 10px;\\n --backdrop-saturate: 120%;\\n --backdrop-brightness: 0.7;\\n --backdrop-filter: blur(var(--backdrop-blur)) saturate(var(--backdrop-saturate)) brightness(var(--backdrop-brightness));\\n --backdrop-opacity: 1;\\n \\n /* Legacy alias for backwards compatibility */\\n --backdrop-background: var(--backdrop-bg);\\n`;\n\n const mesh = this.#generateMeshGradientsDarkVariablesOnly(colors);\n const shadowLines = darkShadows\n ? [this.#generateShadowVariables(darkShadows)]\n : [];\n\n const content = [\n ...varLines,\n ...smartLines,\n ...shadowLines,\n semantic,\n ...accentLines,\n ...surfaceAccentLines,\n ...dangerLines2,\n ...successLines2,\n ...warningLines2,\n ...infoLines2,\n ...surfaceStatusLines2,\n ...calloutDisplayLines2,\n backdrop,\n mesh,\n ].join(\"\");\n\n return `\\n html[data-theme=\"dark\"] {\\n${content} }\\n`;\n }\n\n // Generate only mesh gradient variables for dark mode (for tokens layer)\n #generateMeshGradientsDarkVariablesOnly(colors) {\n // Create darker, more subtle mesh gradients for dark mode\n const dark = colors.dark || colors;\n const primary = dark.primary?.[400] || \"#60a5fa\";\n const secondary = dark.secondary?.[400] || \"#a78bfa\";\n const accent = dark.accent?.[400] || \"#fbbf24\";\n\n return /*css*/ ` /* Mesh Gradient Variables (Dark Mode) */\n --background-mesh-01: radial-gradient(at 27% 37%, color-mix(in oklab, ${primary} 20%, transparent) 0px, transparent 50%),\n radial-gradient(at 97% 21%, color-mix(in oklab, ${secondary} 16%, transparent) 0px, transparent 50%),\n radial-gradient(at 52% 99%, color-mix(in oklab, ${accent} 13%, transparent) 0px, transparent 50%),\n radial-gradient(at 10% 29%, color-mix(in oklab, ${primary} 10%, transparent) 0px, transparent 50%);\n \n --background-mesh-02: radial-gradient(at 40% 20%, color-mix(in oklab, ${secondary} 18%, transparent) 0px, transparent 50%),\n radial-gradient(at 80% 0%, color-mix(in oklab, ${primary} 14%, transparent) 0px, transparent 50%),\n radial-gradient(at 0% 50%, color-mix(in oklab, ${accent} 12%, transparent) 0px, transparent 50%),\n radial-gradient(at 80% 100%, color-mix(in oklab, ${secondary} 10%, transparent) 0px, transparent 50%);\n \n --background-mesh-03: radial-gradient(at 15% 50%, color-mix(in oklab, ${accent} 15%, transparent) 0px, transparent 50%),\n radial-gradient(at 85% 30%, color-mix(in oklab, ${primary} 17%, transparent) 0px, transparent 50%),\n radial-gradient(at 50% 80%, color-mix(in oklab, ${secondary} 13%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 90%, color-mix(in oklab, ${accent} 11%, transparent) 0px, transparent 50%);\n \n --background-mesh-04: radial-gradient(at 70% 15%, color-mix(in oklab, ${primary} 14%, transparent) 0px, transparent 50%),\n radial-gradient(at 20% 80%, color-mix(in oklab, ${secondary} 16%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 60%, color-mix(in oklab, ${accent} 12%, transparent) 0px, transparent 50%),\n radial-gradient(at 30% 40%, color-mix(in oklab, ${primary} 11%, transparent) 0px, transparent 50%);\n \n --background-mesh-05: radial-gradient(at 50% 50%, color-mix(in oklab, ${primary} 17%, transparent) 0px, transparent 50%),\n radial-gradient(at 10% 10%, color-mix(in oklab, ${accent} 14%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 10%, color-mix(in oklab, ${secondary} 13%, transparent) 0px, transparent 50%),\n radial-gradient(at 50% 90%, color-mix(in oklab, ${accent} 10%, transparent) 0px, transparent 50%);\n `;\n }\n\n #generateMeshGradientsDark(colors) {\n // Create darker, more subtle mesh gradients for dark mode\n const dark = colors.dark || colors;\n const primary = dark.primary?.[400] || \"#60a5fa\";\n const secondary = dark.secondary?.[400] || \"#a78bfa\";\n const accent = dark.accent?.[400] || \"#fbbf24\";\n\n return /*css*/ `\n /* Mesh Gradient Backgrounds (Dark Mode) */\n --background-mesh-01: radial-gradient(at 27% 37%, color-mix(in oklab, ${primary} 20%, transparent) 0px, transparent 50%),\n radial-gradient(at 97% 21%, color-mix(in oklab, ${secondary} 16%, transparent) 0px, transparent 50%),\n radial-gradient(at 52% 99%, color-mix(in oklab, ${accent} 13%, transparent) 0px, transparent 50%),\n radial-gradient(at 10% 29%, color-mix(in oklab, ${primary} 10%, transparent) 0px, transparent 50%);\n \n --background-mesh-02: radial-gradient(at 40% 20%, color-mix(in oklab, ${secondary} 18%, transparent) 0px, transparent 50%),\n radial-gradient(at 80% 0%, color-mix(in oklab, ${primary} 14%, transparent) 0px, transparent 50%),\n radial-gradient(at 0% 50%, color-mix(in oklab, ${accent} 12%, transparent) 0px, transparent 50%),\n radial-gradient(at 80% 100%, color-mix(in oklab, ${secondary} 10%, transparent) 0px, transparent 50%);\n \n --background-mesh-03: radial-gradient(at 15% 50%, color-mix(in oklab, ${accent} 15%, transparent) 0px, transparent 50%),\n radial-gradient(at 85% 30%, color-mix(in oklab, ${primary} 17%, transparent) 0px, transparent 50%),\n radial-gradient(at 50% 80%, color-mix(in oklab, ${secondary} 13%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 90%, color-mix(in oklab, ${accent} 11%, transparent) 0px, transparent 50%);\n \n --background-mesh-04: radial-gradient(at 70% 15%, color-mix(in oklab, ${primary} 14%, transparent) 0px, transparent 50%),\n radial-gradient(at 20% 80%, color-mix(in oklab, ${secondary} 16%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 60%, color-mix(in oklab, ${accent} 12%, transparent) 0px, transparent 50%),\n radial-gradient(at 30% 40%, color-mix(in oklab, ${primary} 11%, transparent) 0px, transparent 50%);\n \n --background-mesh-05: radial-gradient(at 50% 50%, color-mix(in oklab, ${primary} 17%, transparent) 0px, transparent 50%),\n radial-gradient(at 10% 10%, color-mix(in oklab, ${accent} 14%, transparent) 0px, transparent 50%),\n radial-gradient(at 90% 10%, color-mix(in oklab, ${secondary} 13%, transparent) 0px, transparent 50%),\n radial-gradient(at 50% 90%, color-mix(in oklab, ${accent} 10%, transparent) 0px, transparent 50%);\n `;\n }\n\n // Generate dark mode component adjustments (for components layer)\n #generateDarkModeComponentRules() {\n // Callout display tokens are now overridden in the dark mode token variables section,\n // so no explicit callout rules are needed here.\n const rules = /*css*/ `/* Dark mode component adjustments */\nhtml[data-theme=\"dark\"] {\n img, video { opacity: 0.8; transition: opacity var(--transition-normal); }\n img:hover, video:hover { opacity: 1; }\n}`;\n\n return rules;\n }\n\n // If the config specifies options.backgroundMesh (1-5), apply the mesh to body.\n // Mesh variables are always generated above; this just opts-in the body background.\n #generateBodyBackgroundMeshRule() {\n try {\n const meshOption = this.options?.design?.options?.backgroundMesh;\n\n if (this.options.debug) {\n this.options.log?.(\n \"debug\",\n \"backgroundMesh check:\",\n\n meshOption,\n );\n }\n\n const num = Number(meshOption);\n if (!Number.isFinite(num) || num === 0) return \"\";\n const idx = Math.max(1, Math.min(5, Math.floor(num)));\n return `/* Optional background mesh applied from config */\\nbody {\\n background: var(--background-mesh-0${idx});\\n background-attachment: fixed;\\n}`;\n } catch (e) {\n if (this.options.debug) {\n this.options.log?.(\n \"error\",\n \"Error in generateBodyBackgroundMeshRule:\",\n e,\n );\n }\n return \"\";\n }\n }\n\n // Conditionally generate a lightweight \".liquid-glass\" utility for frosted glass cards.\n // Inspired by the referenced article, using gradients, borders, shadows, and backdrop-filter.\n #generateLiquidGlassUtility() {\n try {\n if (!this.options?.design?.options?.liquidGlassEffects) return \"\";\n // Use design tokens where possible so the effect adapts to the theme.\n return /*css*/ `/* Liquid glass utility (opt-in via options.liquidGlassEffects) */\n.liquid-glass {\n border-radius: var(--radius-lg);\n /* Subtle translucent fill blended with surface */\n background: color-mix(in oklab, var(--color-surface-subtle) 45%, transparent);\n\n background-image: linear-gradient(\n 135deg,\n rgba(255,255,255,0.35),\n rgba(255,255,255,0.12)\n );\n /* Frosted glass blur + saturation */\n -webkit-backdrop-filter: blur(12px) saturate(140%);\n backdrop-filter: blur(12px) saturate(140%);\n /* Soft inner highlight and outer depth */\n box-shadow:\n inset 0 1px 0 rgba(255,255,255,0.6),\n inset 0 -40px 80px rgba(255,255,255,0.12),\n 0 10px 30px rgba(0,0,0,0.10);\n /* Glossy border with slight light and dark edges */\n border: var(--border-width-thin) solid color-mix(in oklab, var(--color-primary-500) 22%, transparent);\n outline: 1px solid color-mix(in oklab, #ffffff 18%, transparent);\n outline-offset: -1px;\n}\n\nhtml[data-theme=\"dark\"] .liquid-glass {\n background: color-mix(in oklab, var(--color-surface-inverse) 45%, transparent);\n background-image: linear-gradient(\n 135deg,\n color-mix(in oklab, var(--color-primary-300) 40%, transparent),\n color-mix(in oklab, var(--color-surface-overlay) 48%, transparent)\n );\n box-shadow:\n inset 0 1px 0 rgba(255,255,255,0.12),\n inset 0 -40px 80px rgba(0,0,0,0.55),\n 0 18px 38px rgba(0,0,0,0.65);\n border: var(--border-width-thin) solid color-mix(in oklab, var(--color-primary-300) 26%, transparent);\n outline: 1px solid color-mix(in oklab, #ffffff 16%, transparent);\n}\n\n/* Fallback when backdrop-filter isn't supported */\n@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {\n .liquid-glass {\n /* Strengthen fill a bit to compensate for lack of blur */\n background: color-mix(in oklab, var(--color-surface-subtle) 70%, rgba(255,255,255,0.4));\n box-shadow:\n inset 0 1px 0 rgba(255,255,255,0.6),\n 0 10px 24px rgba(0,0,0,0.08);\n }\n\n html[data-theme=\"dark\"] .liquid-glass {\n background: color-mix(in oklab, var(--color-surface-inverse) 70%, transparent);\n box-shadow:\n inset 0 1px 0 rgba(255,255,255,0.1),\n 0 18px 32px rgba(0,0,0,0.58);\n }\n}\n`;\n } catch {\n return \"\";\n }\n }\n\n // Generate border gradient utilities for WHOOP-style card outlines\n // Creates reusable utilities for standard cards, gradient borders, and glow effects\n #generateBorderGradientUtilities() {\n return /*css*/ `/* ============================================================================\n Border Gradient Utilities\n Card outlines with gradient borders and glow effects\n ============================================================================ */\n\n\n/* Gradient border utility - premium/promo card style */\n.border-gradient {\n border: var(--border-width-medium) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(var(--gradient-angle, 135deg),\n var(--color-primary-400),\n var(--color-accent-400)\n ) border-box;\n}\n\n/* Gradient border variants - different color combinations */\n.border-gradient-primary {\n border: var(--border-width-medium) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(var(--gradient-angle, 135deg),\n var(--color-primary-300),\n var(--color-primary-600)\n ) border-box;\n}\n\n.border-gradient-accent {\n border: var(--border-width-medium) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(var(--gradient-angle, 135deg),\n var(--color-accent-300),\n var(--color-accent-600)\n ) border-box;\n}\n\n.border-gradient-secondary {\n border: var(--border-width-medium) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(var(--gradient-angle, 135deg),\n var(--color-secondary-300),\n var(--color-secondary-600)\n ) border-box;\n}\n\n/* Gradient border with different strengths/thickness */\n.border-gradient-soft {\n border: var(--border-width-thin) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(var(--gradient-angle, 135deg),\n var(--color-primary-400),\n var(--color-accent-400)\n ) border-box;\n}\n\n.border-gradient-medium {\n border: var(--border-width-medium) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(var(--gradient-angle, 135deg),\n var(--color-primary-400),\n var(--color-accent-400)\n ) border-box;\n}\n\n.border-gradient-strong {\n border: var(--border-width-thick) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(var(--gradient-angle, 135deg),\n var(--color-primary-400),\n var(--color-accent-400)\n ) border-box;\n}\n\n/* Glow effect utility - for callouts and active states */\n.border-glow {\n box-shadow: 0 0 12px var(--color-primary-500);\n}\n\n.border-glow-sm {\n box-shadow: 0 0 6px var(--color-primary-500);\n}\n\n.border-glow-lg {\n box-shadow: 0 0 20px var(--color-primary-500);\n}\n\n/* Combined gradient + glow for premium effects */\n.border-gradient-glow {\n border: var(--border-width-medium) solid transparent;\n background:\n linear-gradient(var(--border-gradient-fill, var(--color-surface-base)), var(--border-gradient-fill, var(--color-surface-base))) padding-box,\n linear-gradient(135deg,\n var(--color-primary-400),\n var(--color-accent-400)\n ) border-box;\n box-shadow: 0 0 12px var(--color-primary-500);\n}\n\n/* Semantic glow variants */\n.border-glow-primary {\n box-shadow: 0 0 12px var(--color-primary-500);\n}\n\n.border-glow-accent {\n box-shadow: 0 0 12px var(--color-accent-500);\n}\n\n.border-glow-success {\n box-shadow: 0 0 12px var(--color-success-500);\n}\n\n.border-glow-warning {\n box-shadow: 0 0 12px var(--color-warning-500);\n}\n\n.border-glow-danger {\n box-shadow: 0 0 12px var(--color-danger-500);\n}\n\n`;\n }\n\n // #generateLightModeCSS(colors) {\n // // Emit an explicit light theme block scoped to html[data-theme=\"light\"].\n // // We reuse the same color variable generation used for :root so consumers\n // // can rely on attribute-scoped tokens for both themes.\n // try {\n // const colorBlock = this.#generateColorVariables(colors || {});\n // return `html[data-theme=\"light\"] {\\n${colorBlock}}\\n\\n`;\n // } catch (ex) {\n // return \"\";\n // }\n // }\n\n // Legacy #generateBaseStyles() removed - all content moved to #generatePrimitivesLayer()\n\n #generateSemanticHTMLStyles() {\n const { layout = {} } = this.options.design;\n const breakpoints = layout.breakpoints || {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n\n // Note: We intentionally use :where() to minimize specificity of semantic element styles\n // so applications can easily override them without resorting to !important.\n return /*css*/ `/* Semantic HTML Elements (low-specificity via :where()) */\n\n:where(blockquote) {\n margin: 0 0 var(--spacing-4) 0;\n padding: var(--spacing-6) var(--spacing-8);\n border-left: calc(var(--border-width-thick) + var(--border-width-thin)) solid var(--color-link);\n background-color: var(--color-surface-elevated);\n border-radius: var(--radius-none);\n font-size: var(--font-size-lg);\n line-height: var(--line-height-relaxed);\n color: var(--color-text-primary);\n \n :where(p):last-child {\n margin-bottom: 0;\n }\n \n :where(cite) {\n display: block;\n margin-top: var(--spacing-4);\n font-size: var(--font-size-base);\n font-style: normal;\n color: var(--color-link);\n }\n}\n\n:where(hr) {\n margin: var(--spacing-8) 0;\n border: none;\n border-top: var(--border-width-thin) solid var(--color-border);\n height: 0;\n}\n\n/* Labeled horizontal rule: <hr data-content=\"OR\"> */\n:where(hr[data-content]) {\n position: relative;\n border: none;\n text-align: center;\n height: auto;\n overflow: visible;\n \n &::before {\n content: \"\";\n position: absolute;\n left: 0;\n top: 50%;\n width: 100%;\n height: 1px;\n background: linear-gradient(to right, transparent, var(--color-border), transparent);\n }\n \n &::after {\n content: attr(data-content);\n position: relative;\n display: inline-block;\n padding: 0 var(--spacing-3);\n background-color: var(--color-surface-base);\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n line-height: var(--font-line-height-normal);\n }\n}\n\n:where(dl) {\n margin: 0 0 var(--spacing-4) 0;\n}\n\n:where(dt) {\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin-top: var(--spacing-3);\n \n &:first-child {\n margin-top: 0;\n }\n}\n\n:where(dd) {\n margin: var(--spacing-1) 0 var(--spacing-3) var(--spacing-6);\n color: var(--color-text-secondary);\n}\n\n:where(nav), :where(header), :where(footer) {\n display: block;\n}\n\n:where(header), :where(footer) {\n width: 100%;\n}\n\n/* Headings within header elements have tight spacing for intro content */\n:where(header) > :where(h1, h2, h3, h4, h5, h6) {\n margin: 0;\n}\n\n:where(article), :where(section), :where(aside) {\n display: block;\n margin-bottom: var(--spacing-6);\n \n & > *:last-child {\n margin-bottom: 0;\n }\n}\n\n:where(mark) {\n background-color: var(--color-warning-display-bg);\n color: var(--color-warning-display-text);\n padding: 0 var(--spacing-1);\n border-radius: var(--radius-sm);\n}\n\n:where(kbd) {\n display: inline-block;\n padding: var(--spacing-1) var(--spacing-2);\n font-family: var(--font-family-mono);\n font-size: var(--font-size-sm);\n color: var(--color-text-primary);\n background-color: var(--color-surface-elevated);\n border: var(--border-width-thin) solid var(--color-border);\n border-radius: var(--radius-sm);\n box-shadow: 0 2px 0 0 var(--color-border);\n}\n\n:where(abbr[title]) {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-thickness: 1px;\n}\n\n:where(time) {\n font-variant-numeric: tabular-nums;\n}\n\n:where(address) {\n font-style: normal;\n line-height: var(--font-line-height-relaxed);\n margin: 0 0 var(--spacing-4) 0;\n}\n\n:where(details):not(.accordion *) {\n margin: 0 0 var(--spacing-2) 0;\n border: var(--border-width-thin) solid var(--color-border);\n border-radius: var(--radius-md);\n background-color: var(--color-surface-base);\n \n &[open] :where(summary) {\n border-bottom: var(--border-width-thin) solid var(--color-border);\n background-color: var(--color-surface-subtle);\n \n &::after {\n transform: rotate(270deg);\n }\n }\n \n & > *:not(:where(summary)) {\n padding: var(--spacing-4);\n }\n}\n\n:where(summary) {\n padding: var(--spacing-3) var(--spacing-4);\n cursor: pointer;\n border-radius: var(--radius-md);\n font-weight: var(--font-weight-medium);\n user-select: none;\n list-style: none;\n display: flex;\n align-items: center;\n justify-content: space-between;\n transition: background-color var(--transition-fast);\n \n &::-webkit-details-marker {\n display: none;\n }\n \n &::after {\n content: \"\u203A\";\n display: inline-block;\n transform: rotate(90deg);\n transition: transform var(--transition-fast);\n font-size: var(--font-size-xl);\n font-weight: var(--font-weight-bold);\n color: var(--color-text-secondary);\n }\n \n &:hover {\n background-color: var(--color-surface-subtle);\n }\n}\n\n/* Dialog styles moved to #generateDialogStyles() */\n\n`;\n }\n\n #generateFormStyles() {\n const {\n shape = {},\n spatialRhythm = {},\n inputPadding,\n buttonPadding,\n focusRingWidth,\n focusRingOpacity,\n borderWidthThin,\n sectionSpacing,\n buttonMinHeight,\n inputMinHeight,\n } = this.options.design;\n\n const shapeBorderWidth =\n typeof shape.borderWidth === \"number\"\n ? shape.borderWidth\n : typeof shape.borderWidth === \"string\"\n ? (enums.BorderWidths[shape.borderWidth] ?? null)\n : null;\n\n const inputPaddingValue = spatialRhythm.inputPadding ?? inputPadding ?? 0.75;\n const buttonPaddingValue =\n spatialRhythm.buttonPadding ?? buttonPadding ?? 1.0;\n const focusWidth = focusRingWidth || 3;\n const borderWidth =\n borderWidthThin || shapeBorderWidth || enums.BorderWidths.thin;\n const sectionSpacingValue =\n spatialRhythm.sectionSpacing ?? sectionSpacing ?? 2.0;\n const minButtonHeight = buttonMinHeight || 30;\n const minInputHeight = inputMinHeight || 40;\n\n return /*css*/ `/* Mobile-First Form Styles - Generated from Design Config */\nform {\n margin: 0;\n width: 100%;\n}\n\nfieldset {\n margin: 0; \n width: 100%;\n \n /* Unified styling for radio groups and checkbox groups */\n &[role=\"radiogroup\"],\n &[role=\"group\"] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-2);\n padding: 0;\n background-color: transparent;\n \n label {\n display: flex;\n align-items: center;\n gap: var(--spacing-3);\n padding: var(--spacing-1) 0;\n cursor: pointer;\n min-height: auto;\n border: none;\n background: none;\n font-weight: var(--font-weight-normal);\n margin-bottom: 0;\n \n &:hover {\n color: var(--color-link-hover, var(--color-primary-text-hover));\n }\n }\n\n input[type=\"checkbox\"]{\n border-radius: var(--radius-xs);\n }\n \n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: static;\n opacity: 1;\n width: var(--spacing-5);\n height: var(--spacing-5);\n min-height: var(--spacing-5);\n padding: var(--spacing-2);\n margin: 0;\n cursor: pointer;\n flex-shrink: 0;\n accent-color: var(--color-primary-fill);\n\n &:focus-visible {\n outline: none;\n\n box-shadow:\n 0 0 0 2px var(--color-focus-ring, var(--color-primary-500)),\n 0 0 0 4px color-mix(in srgb,\n var(--color-focus-ring, var(--color-primary-500)) 40%,\n transparent\n );\n }\n\n &:checked {\n background-color: var(--color-primary-fill);\n }\n \n }\n }\n \n}\n\n\n\n/* Nested legend scaling: reduce font-size for deeper sub-forms */\nfieldset > legend { font-size: var(--font-size-lg); }\nfieldset fieldset > legend { font-size: var(--font-size-base); }\nfieldset fieldset fieldset > legend { font-size: var(--font-size-sm); }\n\n.form-container {\n display: grid;\n gap: var(--spacing-6);\n width: 100%;\n}\n\n.fields {\n display: grid;\n gap: var(--spacing-4);\n}\n\nlabel {\n display: block;\n font-weight: var(--font-weight-medium);\n color: var(--color-text-primary);\n font-size: var(--font-size-sm);\n line-height: var(--font-line-height-normal);\n}\n\n[data-label] {\n display: block;\n font-weight: var(--font-weight-medium);\n color: var(--color-text-primary);\n font-size: var(--font-size-sm);\n margin-bottom: var(--spacing-2);\n}\n\n[data-open]{\n [data-label]{\n margin-bottom: 0;\n }\n}\n\n.field-description {\n font-size: var(--font-size-xs);\n color: var(--color-text-secondary);\n margin-top: var(--spacing-1);\n line-height: var(--font-line-height-relaxed);\n}\n\ninput, textarea, select {\n &:focus {\n outline: none;\n }\n}\n\ninput, textarea, select {\n width: 100%;\n min-height: ${minInputHeight}px;\n padding: calc(var(--spacing-1) * ${inputPaddingValue}) var(--spacing-4);\n border: var(--border-width-medium) solid var(--color-border);\n border-radius: var(--radius-md);\n font-family: var(--font-family-body);\n font-size: var(--font-size-base);\n line-height: var(--font-line-height-normal);\n background-color: var(--color-input-bg);\n color: var(--color-text-primary);\n transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background-color var(--transition-fast);\n touch-action: manipulation;\n appearance: none;\n -webkit-appearance: none;\n \n &:focus {\n border-color: var(--color-focus-ring, var(--color-primary-500));\n background-color: var(--color-surface-base);\n }\n \n &:disabled {\n background-color: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n border-color: var(--color-border);\n cursor: not-allowed;\n opacity: 0.6;\n }\n \n &:invalid {\n border-color: var(--color-danger-fill);\n \n &:focus {\n box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-danger-fill) ${Math.round(\n (focusRingOpacity || 0.3) * 100,\n )}%, transparent);\n }\n }\n}\n\ninput[type=\"range\"] {\n padding: 0;\n background: transparent;\n min-height: auto;\n}\n\n/* Make range visually match other inputs */\ninput[type=\"range\"] {\n -webkit-appearance: none;\n appearance: none;\n height: var(--input-min-height, 40px); /* align control height with inputs */\n width: 100%;\n}\n\n/* Track and thumb styling - using CSS nesting to reduce repetition */\ninput[type=\"range\"] {\n /* WebKit track */\n &::-webkit-slider-runnable-track {\n height: var(--range-track-height, 8px);\n background: var(--color-input-bg);\n border-radius: var(--radius-full);\n }\n\n /* WebKit thumb */\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: var(--range-thumb-size, 28px);\n height: var(--range-thumb-size, 28px);\n margin-top: calc((var(--range-track-height, 8px) - var(--range-thumb-size, 28px)) / 2);\n background: color-mix(in srgb, var(--color-primary-fill) 15%, var(--color-surface-base));\n border-radius: 50%;\n box-shadow: var(--shadow-sm);\n cursor: grab;\n border: var(--border-width-thin) solid color-mix(in srgb, var(--color-primary-fill) 30%, var(--color-border));\n }\n\n /* Mozilla track */\n &::-moz-range-track {\n height: var(--range-track-height, 8px);\n background: var(--color-input-bg);\n border-radius: var(--radius-full);\n }\n\n /* Mozilla thumb */\n &::-moz-range-thumb {\n width: var(--range-thumb-size, 28px);\n height: var(--range-thumb-size, 28px);\n background: color-mix(in srgb, var(--color-primary-fill) 15%, var(--color-surface-base));\n border-radius: 50%;\n box-shadow: var(--shadow-sm);\n border: var(--border-width-thin) solid color-mix(in srgb, var(--color-primary-fill) 30%, var(--color-border));\n transform: translateY(calc((var(--range-track-height, 8px) - var(--range-thumb-size, 28px)) / 2));\n }\n\n /* Hover and focus states for WebKit */\n &:hover::-webkit-slider-thumb,\n &:focus-visible::-webkit-slider-thumb {\n cursor: grabbing;\n background: var(--color-primary-fill);\n box-shadow: 0 4px 12px rgba(0,0,0,0.2);\n border-color: var(--color-primary-fill-hover);\n }\n\n /* Active state for WebKit */\n &:active::-webkit-slider-thumb {\n background: var(--color-primary-fill-active);\n }\n\n /* Hover and focus states for Mozilla */\n &:hover::-moz-range-thumb,\n &:focus-visible::-moz-range-thumb {\n background: var(--color-primary-fill);\n box-shadow: 0 4px 12px rgba(0,0,0,0.2);\n border-color: var(--color-primary-fill-hover);\n cursor: grabbing;\n }\n\n /* Active state for Mozilla */\n &:active::-moz-range-thumb {\n background: var(--color-primary-fill-active);\n }\n}\n\n/* Focus style for container to match input focus */\n.range-container:focus-within {\n border-color: var(--color-focus-ring, var(--color-primary-500));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-focus-ring, var(--color-primary-500)) 30%, transparent);\n}\n\ninput[type=\"range\"]:active::-moz-range-thumb {\n background: var(--color-primary-fill-active);\n}\n\ninput[type=\"color\"] {\n -webkit-appearance: none;\n appearance: none;\n padding: 0;\n width: calc(var(--spacing-8) + var(--spacing-1));\n height: calc(var(--spacing-8) + var(--spacing-1));\n min-height: auto;\n border-radius: var(--radius-sm);\n border: var(--border-width-thin) solid var(--color-border);\n overflow: hidden;\n cursor: pointer;\n background: transparent;\n\n &::-webkit-color-swatch-wrapper {\n padding: 0;\n border-radius: inherit;\n }\n\n &::-webkit-color-swatch {\n border: none;\n border-radius: inherit;\n }\n\n &::-moz-color-swatch {\n border: none;\n border-radius: inherit;\n }\n}\n\n/* Button-style checkbox inputs outside of fieldsets */\n.checkbox-container input[type=\"checkbox\"] {\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n pointer-events: none;\n}\n\n:is(\n label:has(input[type=\"checkbox\"]),\n input[type=\"checkbox\"] + label\n):not(fieldset label):not(label[data-toggle]) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: calc(${minButtonHeight}px * 0.75);\n padding: calc(var(--spacing-1) * ${\n buttonPaddingValue * 0.6\n }) calc(var(--spacing-4) * 0.85);\n border: var(--border-width-medium) solid var(--color-border);\n border-radius: var(--radius-md);\n font-family: var(--font-family-body);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-medium);\n line-height: 1.2;\n cursor: pointer;\n transition: all var(--transition-fast);\n text-decoration: none;\n touch-action: manipulation;\n user-select: none;\n background-color: transparent;\n color: var(--color-text-primary);\n margin: 0;\n flex: 0 1 auto;\n white-space: nowrap;\n \n &:hover {\n background-color: var(--color-surface-subtle);\n border-color: var(--color-primary-fill);\n }\n\n &:has(input[type=\"checkbox\"]:checked),\n input[type=\"checkbox\"]:checked + label:not(fieldset label):not(label[data-toggle]) {\n background-color: color-mix(in oklab, var(--color-primary-fill) 8%, transparent);\n color: var(--color-primary-text);\n border-color: var(--color-primary-fill);\n border-width: var(--border-width-medium);\n font-weight: var(--font-weight-semibold);\n \n &:hover {\n background-color: color-mix(in oklab, var(--color-primary-fill) 15%, transparent);\n border-color: var(--color-primary-fill);\n }\n }\n\n &:has(input[type=\"checkbox\"]:focus),\n input[type=\"checkbox\"]:focus + label:not(fieldset label):not(label[data-toggle]) {\n outline: none;\n box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-focus-ring, var(--color-primary-500)) ${Math.round(\n (focusRingOpacity || 0.3) * 100,\n )}%, transparent);\n }\n\n &:has(input[type=\"checkbox\"]:disabled),\n input[type=\"checkbox\"]:disabled + label:not(fieldset label):not(label[data-toggle]) {\n background-color: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n border-color: var(--color-border);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n &:has(input[type=\"checkbox\"]:checked:disabled),\n input[type=\"checkbox\"]:checked:disabled + label:not(fieldset label):not(label[data-toggle]) {\n background-color: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n border-color: var(--color-border);\n }\n}\n\n/* Keep default checkbox/radio for inputs NOT in special containers */\ninput[type=\"checkbox\"]:not(fieldset input[type=\"checkbox\"]):not(.checkbox-container input[type=\"checkbox\"]),\ninput[type=\"radio\"]:not(fieldset input[type=\"radio\"]) {\n width: var(--spacing-5);\n height: var(--spacing-5);\n min-height: var(--spacing-5);\n margin-right: var(--spacing-2);\n cursor: pointer;\n position: static;\n opacity: 1;\n appearance: auto;\n -webkit-appearance: auto;\n accent-color: var(--color-primary-fill);\n\n &:disabled {\n cursor: not-allowed;\n }\n}\n\n/* Button-style radio and checkbox groups with .buttons class */\nfieldset[role=\"radiogroup\"].buttons,\nfieldset[role=\"group\"].buttons {\n flex-direction: row;\n flex-wrap: wrap;\n gap: var(--spacing-3);\n \n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n pointer-events: none;\n }\n \n label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: calc(${minButtonHeight}px * 0.75);\n padding: calc(var(--spacing-1) * ${\n buttonPaddingValue * 0.6\n }) calc(var(--spacing-4) * 0.85);\n border: var(--border-width-medium) solid var(--color-border);\n border-radius: var(--radius-md);\n font-family: var(--font-family-body);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-medium);\n line-height: 1.2;\n cursor: pointer;\n transition: all var(--transition-fast);\n text-decoration: none;\n touch-action: manipulation;\n user-select: none;\n background-color: transparent;\n color: var(--color-text-primary);\n margin: 0;\n flex: 0 1 auto;\n white-space: nowrap;\n \n &:hover {\n background-color: var(--color-surface-subtle);\n border-color: var(--color-primary-fill);\n color: var(--color-text-primary);\n }\n\n &:has([disabled]) {\n pointer-events: none;\n }\n\n &:has(input:is([type=\"radio\"], [type=\"checkbox\"]):checked) {\n background-color: color-mix(in oklab, var(--color-primary-fill) 8%, transparent);\n border-color: var(--color-primary-fill);\n border-width: var(--border-width-medium);\n font-weight: var(--font-weight-semibold);\n \n &:hover {\n background-color: color-mix(in oklab, var(--color-primary-fill) 15%, transparent);\n border-color: var(--color-primary-fill-hover);\n }\n }\n\n &:has(input:is([type=\"radio\"], [type=\"checkbox\"]):focus) {\n outline: none;\n box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-focus-ring, var(--color-primary-500)) ${Math.round(\n (focusRingOpacity || 0.3) * 100,\n )}%, transparent);\n }\n\n &:has(input:is([type=\"radio\"], [type=\"checkbox\"]):disabled) {\n background-color: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n border-color: var(--color-border);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n &:has(input:is([type=\"radio\"], [type=\"checkbox\"]):checked:disabled) {\n background-color: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n border-color: var(--color-border);\n }\n }\n}\n\n/* Toggle switches - enhanced checkboxes with data-toggle attribute */\nlabel[data-toggle] {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-3);\n cursor: pointer;\n user-select: none;\n padding: 0;\n background: transparent;\n border: none;\n min-height: auto;\n font-weight: var(--font-weight-normal);\n\n /* Hide the original checkbox in toggle switches */\n input[type=\"checkbox\"] {\n display: none;\n }\n\n span[data-label] {\n margin-bottom: 0;\n }\n\n /* Toggle switch container */\n .toggle-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n background-color: var(--color-gray-300);\n border-radius: var(--radius-full);\n transition: background-color 200ms ease;\n cursor: pointer;\n flex-shrink: 0;\n }\n\n /* Toggle switch knob */\n .toggle-knob {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background-color: #ffffff;\n border-radius: 50%;\n transition: left 200ms ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n }\n\n /* Icons in toggle knob (opt-in via .with-icons class) */\n &.with-icons .toggle-knob::before {\n content: \"\u2715\";\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: bold;\n color: var(--color-gray-600);\n transition: opacity 200ms ease;\n }\n\n &:has(input[type=\"checkbox\"]:checked) {\n &.with-icons .toggle-knob::before {\n content: \"\u2713\";\n color: var(--color-primary-contrast, white);\n }\n\n .toggle-switch {\n background-color: var(--color-primary-fill);\n }\n\n .toggle-knob {\n left: 22px;\n }\n }\n\n &:has(input[type=\"checkbox\"]:focus) .toggle-switch,\n &:focus-visible .toggle-switch {\n outline: 2px solid var(--color-focus-ring, var(--color-primary-500));\n outline-offset: 2px;\n }\n\n /* Remove default outline on label itself */\n &:focus {\n outline: none;\n }\n\n /* Disabled state */\n &:has(input[type=\"checkbox\"]:disabled) {\n cursor: not-allowed;\n opacity: 0.6;\n\n .toggle-switch {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n}\n\n/* Color input enhancement shell - applied by enhanceColorInput on label[data-color] */\nlabel[data-color] {\n display: grid;\n gap: var(--spacing-2);\n\n .color-control {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-3);\n width: fit-content;\n min-height: var(--input-min-height, 40px);\n padding: var(--spacing-2) var(--spacing-3);\n border: var(--border-width-thin) solid var(--color-border);\n border-radius: var(--radius-md);\n background: var(--color-surface-base);\n color: var(--color-text-primary);\n transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background-color var(--transition-fast);\n }\n\n .color-control .color-swatch {\n position: relative;\n display: inline-flex;\n width: calc(var(--spacing-8) + var(--spacing-1));\n height: calc(var(--spacing-8) + var(--spacing-1));\n border-radius: var(--radius-sm);\n }\n\n .color-control output {\n margin: 0;\n min-width: 8ch;\n font-family: var(--font-family-mono);\n font-size: var(--font-size-sm);\n line-height: var(--font-line-height-tight);\n color: var(--color-text-secondary);\n text-transform: lowercase;\n }\n\n .color-control[data-unset=\"1\"] output {\n font-style: italic;\n color: var(--color-text-muted);\n }\n\n .color-control input[type=\"color\"] {\n width: calc(var(--spacing-8) + var(--spacing-1));\n height: calc(var(--spacing-8) + var(--spacing-1));\n border-radius: var(--radius-sm);\n border: var(--border-width-thin) solid var(--color-border);\n background: transparent;\n padding: 0;\n }\n\n .color-control input[type=\"color\"]::-webkit-color-swatch {\n border: none;\n border-radius: calc(var(--radius-sm) - var(--border-width-thin));\n }\n\n .color-control input[type=\"color\"]::-moz-color-swatch {\n border: none;\n border-radius: calc(var(--radius-sm) - var(--border-width-thin));\n }\n\n .color-control .color-swatch[data-unset=\"1\"]::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: var(--radius-sm);\n border: var(--border-width-thin) solid var(--color-border);\n background-color: color-mix(in oklab, var(--color-surface-subtle) 78%, var(--color-text-primary) 22%);\n background-image:\n linear-gradient(\n 45deg,\n color-mix(in oklab, var(--color-surface-base) 88%, var(--color-text-primary) 12%) 25%,\n transparent 25%,\n transparent 75%,\n color-mix(in oklab, var(--color-surface-base) 88%, var(--color-text-primary) 12%) 75%,\n color-mix(in oklab, var(--color-surface-base) 88%, var(--color-text-primary) 12%)\n ),\n linear-gradient(\n 45deg,\n color-mix(in oklab, var(--color-surface-base) 88%, var(--color-text-primary) 12%) 25%,\n transparent 25%,\n transparent 75%,\n color-mix(in oklab, var(--color-surface-base) 88%, var(--color-text-primary) 12%) 75%,\n color-mix(in oklab, var(--color-surface-base) 88%, var(--color-text-primary) 12%)\n );\n background-size: calc(var(--spacing-2) * 1.25) calc(var(--spacing-2) * 1.25);\n background-position:\n 0 0,\n calc(var(--spacing-2) * 0.625) calc(var(--spacing-2) * 0.625);\n pointer-events: none;\n }\n\n .color-control .color-swatch[data-unset=\"1\"] input[type=\"color\"] {\n opacity: 0;\n }\n\n &:focus-within .color-control {\n border-color: var(--color-focus-ring, var(--color-primary-500));\n box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-focus-ring, var(--color-primary-500)) ${Math.round(\n (focusRingOpacity || 0.3) * 100,\n )}%, transparent);\n }\n\n &:has(input[type=\"color\"]:disabled) .color-control {\n background: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n cursor: not-allowed;\n }\n}\n\ninput[type=\"file\"] {\n padding: var(--spacing-2) var(--spacing-4);\n cursor: pointer;\n}\n\n/* Textareas */\ntextarea {\n min-height: calc(var(--spacing-4) * 5);\n padding: var(--spacing-3) var(--spacing-4);\n resize: vertical;\n line-height: var(--font-line-height-relaxed);\n}\n\n/* Select dropdowns */\nselect {\n cursor: pointer;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right var(--spacing-2) center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: var(--spacing-8);\n}\n\n/* Button styling */\nbutton, .btn, input[type=\"submit\"], input[type=\"button\"], input[type=\"reset\"] {\n --btn-pad-y: max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2));\n --btn-target-h: max(${minButtonHeight}px, calc(var(--font-size-base) + (var(--btn-pad-y) * 2) + (var(--border-width-medium) * 2)));\n display: inline-flex;\n gap: var(--spacing-1);\n align-items: center;\n justify-content: center;\n min-height: var(--btn-target-h);\n height: var(--btn-target-h);\n padding: var(--btn-pad-y) var(--spacing-6);\n border: var(--border-width-medium) solid transparent;\n border-radius: var(--radius-md);\n box-sizing: border-box;\n font-family: var(--font-family-body);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-medium);\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n transition: all var(--transition-fast);\n text-decoration: none;\n touch-action: manipulation;\n user-select: none;\n background-color: var(--color-surface-base);\n color: var(--color-text-primary);\n border-color: var(--color-border);\n \n /* Only apply generic hover to non-variant buttons */\n &:hover:not(.btn-primary):not(.btn-secondary):not(.btn-outline):not(.btn-danger) {\n background-color: var(--color-surface-elevated);\n }\n \n &:focus {\n outline: none;\n box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-focus-ring, var(--color-primary-500)) ${Math.round(\n (focusRingOpacity || 0.3) * 100,\n )}%, transparent);\n }\n \n &:disabled {\n background-color: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n border-color: var(--color-input-disabled-bg);\n cursor: not-allowed;\n opacity: 0.6;\n }\n}\n\n.btn-primary {\n background-color: var(--color-primary-fill);\n color: white;\n border-color: var(--color-primary-fill);\n \n &:hover {\n background-color: var(--color-primary-fill-hover);\n border-color: var(--color-primary-fill-hover);\n color: white;\n }\n\n &:active {\n background-color: var(--color-primary-fill-active);\n border-color: var(--color-primary-fill-active);\n color: white;\n }\n \n &:focus {\n box-shadow: 0 0 0 ${focusWidth}px color-mix(in oklab, var(--color-focus-ring, var(--color-primary-500)) ${Math.round(\n (focusRingOpacity || 0.3) * 100,\n )}%, transparent);\n }\n \n &:disabled {\n background-color: var(--color-input-disabled-bg);\n color: var(--color-input-disabled-text);\n border-color: var(--color-input-disabled-bg);\n }\n}\n\n.btn-secondary {\n background-color: var(--color-surface-base);\n color: var(--color-text-primary);\n border-color: var(--color-border);\n \n &:hover {\n background-color: var(--color-surface-elevated);\n }\n}\n\n.btn-outline {\n background-color: transparent;\n color: var(--color-link);\n border-color: var(--color-link);\n \n &:hover {\n background-color: var(--color-primary-fill);\n color: var(--color-primary-contrast, #ffffff);\n border-color: var(--color-primary-fill);\n\n pds-icon {\n color: var(--color-primary-contrast, #ffffff);\n }\n }\n\n &:active {\n background-color: var(--color-primary-fill-active);\n border-color: var(--color-primary-fill-active);\n color: var(--color-primary-contrast, #ffffff);\n\n pds-icon {\n color: var(--color-primary-contrast, #ffffff);\n }\n }\n \n &:disabled {\n background-color: transparent;\n color: var(--color-input-disabled-text);\n border-color: var(--color-input-disabled-bg);\n }\n}\n\n.btn-danger {\n background-color: var(--color-danger-fill);\n color: white;\n border-color: var(--color-danger-fill);\n\n &:hover {\n background-color: var(--color-danger-fill-hover);\n border-color: var(--color-danger-fill-hover);\n color: white;\n }\n\n &:active {\n background-color: var(--color-danger-fill-active);\n border-color: var(--color-danger-fill-active);\n color: white;\n }\n}\n\n.btn-danger.btn-outline {\n background-color: transparent;\n color: var(--color-danger-fill);\n border-color: var(--color-danger-fill);\n\n &:hover {\n background-color: var(--color-danger-fill);\n border-color: var(--color-danger-fill);\n color: white;\n\n pds-icon {\n color: white;\n }\n }\n\n &:active {\n background-color: var(--color-danger-fill-active);\n border-color: var(--color-danger-fill-active);\n color: white;\n\n pds-icon {\n color: white;\n }\n }\n\n &:disabled {\n background-color: transparent;\n color: var(--color-input-disabled-text);\n border-color: var(--color-input-disabled-bg);\n }\n}\n\n.btn-sm {\n --btn-pad-y: calc(max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2)) * 0.85);\n --btn-target-h: max(calc(${minButtonHeight}px * 0.85), calc(var(--font-size-sm) + (var(--btn-pad-y) * 2) + (var(--border-width-medium) * 2)));\n padding: var(--btn-pad-y) calc(var(--spacing-6) * 0.8);\n font-size: var(--font-size-sm);\n min-height: var(--btn-target-h);\n height: var(--btn-target-h);\n}\n\n.btn-xs {\n --btn-pad-y: calc(max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2)) * 0.7);\n --btn-target-h: max(calc(${minButtonHeight}px * 0.7), calc(var(--font-size-xs) + (var(--btn-pad-y) * 2) + (var(--border-width-medium) * 2)));\n padding: var(--btn-pad-y) calc(var(--spacing-6) * 0.65);\n font-size: var(--font-size-xs);\n min-height: var(--btn-target-h);\n height: var(--btn-target-h);\n}\n\n\n.btn-lg {\n --btn-pad-y: calc(max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2)) * 1.15);\n --btn-target-h: max(calc(${minButtonHeight}px * 1.15), calc(var(--font-size-lg) + (var(--btn-pad-y) * 2) + (var(--border-width-medium) * 2)));\n padding: var(--btn-pad-y) calc(var(--spacing-6) * 1.35);\n font-size: var(--font-size-lg);\n min-height: var(--btn-target-h);\n height: var(--btn-target-h);\n}\n\n/* Working/loading state for buttons */\nbutton.btn-working,\na.btn-working {\n cursor: wait;\n pointer-events: none;\n opacity: 0.6;\n \n pds-icon:first-child {\n animation: pds-spin 0.8s linear infinite;\n }\n}\n\n@keyframes pds-spin {\n to { transform: rotate(360deg); }\n}\n\n/* Skeleton loading animation */\n.skeleton {\n background: linear-gradient(\n 90deg,\n color-mix(in oklab, var(--color-surface-base) 92%, var(--color-text-primary) 8%) 0%,\n color-mix(in oklab, var(--color-surface-base) 85%, var(--color-text-primary) 15%) 50%,\n color-mix(in oklab, var(--color-surface-base) 92%, var(--color-text-primary) 8%) 100%\n );\n background-size: 200% 100%;\n animation: pds-skeleton 1.5s ease-in-out infinite;\n border-radius: var(--radius-sm);\n \n &::before {\n content: '\\\\00a0';\n }\n}\n\n@keyframes pds-skeleton {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n/* Empty State */\n.empty-state {\n margin: auto;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--spacing-4);\n color: var(--color-text-secondary);\n padding: var(--spacing-6) var(--spacing-4);\n background-color: var(--color-surface-subtle);\n max-width: var(--layout-max-width-md, 736px);\n border-radius: var(--radius-md);\n nav {\n margin-top: var(--spacing-4);\n display: flex;\n gap: var(--spacing-3);\n }\n pds-icon { \n color: var(--color-text-muted);\n }\n}\n\n/* clip lines */\n\n[data-clip] {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n -webkit-line-clamp: attr(data-clip number, 3);\n line-clamp: attr(data-clip number, 3);\n position: relative;\n padding-inline-end: var(--spacing-6);\n --clip-more-bg: var(--color-surface-base);\n max-height: var(--clip-max-height-closed, calc(var(--spacing-12) * 3));\n transition: max-height var(--transition-fast), padding-inline-end var(--transition-fast);\n overflow: hidden;\n\n /* optional visual \u201Cmore\u201D hint*/\n &:not([data-clip-open=\"true\"])[data-clip-more]::after{\n content: attr(data-clip-more);\n }\n\n &:not([data-clip-open=\"true\"]):not([data-clip-more])::after{\n content: \"more...\";\n }\n\n /* optional visual \u201Cless\u201D hint*/\n &[data-clip-open=\"true\"][data-clip-less]::after{\n content: attr(data-clip-less);\n }\n\n &[data-clip-open=\"true\"]:not([data-clip-less])::after{\n content: \"less...\";\n }\n\n &::after{\n position: absolute;\n inset-block-end: 0;\n inset-inline-end: 0;\n display: inline-flex;\n align-items: center;\n padding: var\n padding-inline-start: var(--spacing-2);\n cursor: pointer;\n opacity: .7;\n transition: opacity var(--transition-fast), transform var(--transition-fast);\n }\n\n &[data-clip-open=\"true\"] {\n -webkit-line-clamp: unset;\n line-clamp: unset;\n max-height: var(--clip-max-height-open, calc(var(--spacing-12) * 20));\n padding-inline-end: var(--spacing-6);\n }\n\n &[data-clip-open=\"true\"]::after{\n opacity: .9;\n transform: translateY(calc(var(--spacing-1) * -1));\n }\n\n}\n\n\n\n/* Form utility classes */\n.range-container {\n display: flex;\n align-items: center;\n gap: var(--spacing-3);\n width: 100%;\n background: var(--color-input-bg);\n border: var(--border-width-thin) solid var(--color-border);\n border-radius: var(--radius-md);\n min-height: var(--input-min-height, 40px);\n position: relative;\n\n input[type=\"range\"] {\n border: none;\n }\n}\n\n.range-bubble {\n position: absolute;\n top: calc(-1 * (var(--range-thumb-size, 28px) + var(--spacing-2)));\n transform: translateX(-50%);\n min-width: calc(var(--range-thumb-size, 28px) * 0.8);\n padding: var(--spacing-1) var(--spacing-2);\n border-radius: var(--radius-md);\n background: var(--color-surface-base);\n color: var(--color-text-primary);\n text-align: center;\n font-size: var(--font-size-sm);\n box-shadow: var(--shadow-md);\n opacity: 0;\n pointer-events: none;\n transition: opacity 150ms ease, transform 150ms ease;\n\n &.visible {\n opacity: 1;\n }\n}\n\n/* Anchor bubble to the thumb position using left (set by enhancer)\n and center with translateX(-50%). */\n\n/* Array field styling */\n.array-list {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-4);\n margin-bottom: var(--spacing-4);\n}\n\n.array-item {\n position: relative;\n padding: var(--spacing-4);\n border: var(--border-width-medium) solid var(--color-border);\n border-radius: var(--radius-md);\n background-color: var(--color-surface-base);\n \n .array-controls {\n padding-top: var(--spacing-3);\n border-top: var(--border-width-medium) solid var(--color-border);\n margin-top: var(--spacing-4);\n }\n}\n\n.array-controls {\n display: flex;\n gap: var(--spacing-2);\n margin-top: var(--spacing-3);\n flex-wrap: wrap;\n\n button {\n padding: var(--spacing-2) var(--spacing-3);\n font-size: var(--font-size-sm);\n min-height: auto;\n }\n}\n\n.range-value {\n min-width: var(--spacing-16);\n text-align: right;\n font-weight: var(--font-weight-medium);\n font-size: var(--font-size-sm);\n color: var(--color-text-primary);\n}\n\n.checkbox-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--spacing-2);\n flex-wrap: wrap;\n\n input[type=\"checkbox\"],\n input[type=\"radio\"] {\n position: absolute;\n opacity: 0;\n }\n}\n\n`;\n }\n\n #generateTableStyles() {\n const { layout = {} } = this.options.design;\n const breakpoints = layout.breakpoints || {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n\n return /*css*/ `/* Table Styles - Mobile First */\n\ntable {\n width: 100%;\n border-collapse: collapse;\n margin: 0 0 var(--spacing-6) 0;\n background-color: var(--color-surface-base);\n border-radius: var(--radius-md);\n overflow: hidden;\n font-size: var(--font-size-sm);\n \n @media (min-width: ${breakpoints.sm}px) {\n font-size: var(--font-size-base);\n }\n}\n\n.table-responsive {\n @media (max-width: ${breakpoints.sm - 1}px) {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n margin: 0 0 var(--spacing-6) 0;\n \n table {\n min-width: 600px;\n margin: 0;\n }\n }\n}\n\nthead {\n background-color: var(--color-surface-subtle);\n}\n\nth {\n padding: var(--spacing-3) var(--spacing-4);\n text-align: left;\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n border-bottom: var(--border-width-medium) solid var(--color-border);\n}\n\ntd {\n padding: var(--spacing-3) var(--spacing-4);\n color: var(--color-text-secondary);\n border-bottom: var(--border-width-thin) solid var(--color-border);\n}\n\ntbody {\n tr {\n transition: background-color var(--transition-fast);\n \n &:hover {\n background-color: var(--color-surface-subtle);\n }\n \n &:last-child td {\n border-bottom: none;\n }\n }\n}\n\n.table-striped {\n tbody tr:nth-child(even) {\n background-color: var(--color-surface-subtle);\n }\n}\n\n.table-bordered {\n border: var(--border-width-thin) solid var(--color-border);\n \n th, td {\n border: var(--border-width-thin) solid var(--color-border);\n }\n}\n\n.table-compact {\n th, td {\n padding: var(--spacing-2) var(--spacing-3);\n }\n}\n\n`;\n }\n\n #generateCalloutStyles() {\n return /*css*/ `/* Callout/Notification Styles */\n\n.callout {\n padding: var(--spacing-4);\n border-radius: var(--radius-md);\n margin: 0 0 var(--spacing-4) 0;\n border-left: calc(var(--border-width-thick) + var(--border-width-thin)) solid;\n border-color: var(--color-border);\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-3);\n font-size: var(--font-size-sm);\n line-height: var(--font-line-height-relaxed);\n background-color: var(--color-surface-subtle);\n color: var(--color-text-primary);\n \n & > *:last-child {\n margin-bottom: 0;\n }\n}\n/* Variants: success/info/warning/danger mapped to tokens */\n.callout-success {\n background-color: var(--color-success-display-bg);\n border-color: var(--color-success-display-border);\n color: var(--color-success-display-text);\n}\n.callout-info {\n background-color: var(--color-info-display-bg);\n border-color: var(--color-info-display-border);\n color: var(--color-info-display-text);\n}\n.callout-warning {\n background-color: var(--color-warning-display-bg);\n border-color: var(--color-warning-display-border);\n color: var(--color-warning-display-text);\n}\n.callout-danger,\n.callout-error {\n background-color: var(--color-danger-display-bg);\n border-color: var(--color-danger-display-border);\n color: var(--color-danger-display-text);\n}\n\n.callout-title {\n font-weight: var(--font-weight-semibold);\n margin: 0 0 var(--spacing-2) 0;\n font-size: var(--font-size-base);\n}\n\n.callout-icon {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n \n pds-icon {\n flex-shrink: 0;\n }\n}\n\n.callout-dismissible {\n padding-right: var(--spacing-12);\n position: relative;\n}\n\n.callout-close {\n position: absolute;\n top: var(--spacing-3);\n right: var(--spacing-3);\n background: none;\n border: none;\n font-size: var(--font-size-xl);\n line-height: 1;\n opacity: 0.6;\n cursor: pointer;\n padding: var(--spacing-1);\n transition: opacity var(--transition-fast);\n \n &:hover {\n opacity: 1;\n }\n}\n\n`;\n }\n\n #generateAccordionStyles() {\n return /*css*/ `/* Accordion (details/summary) */\n\n:where(.accordion details) {\n border: var(--border-width-thin) solid var(--color-border);\n border-radius: var(--radius-md);\n background: var(--color-surface-base);\n margin: 0 0 var(--spacing-3) 0;\n overflow: hidden;\n\n &[open] {\n overflow: visible;\n\n & > summary::after {\n transform: rotate(45deg);\n }\n\n &::details-content {\n block-size: auto;\n overflow: visible;\n }\n }\n\n /* Modern approach: animate block-size with ::details-content */\n &::details-content {\n block-size: 0;\n overflow: hidden;\n transition: block-size var(--transition-normal) ease, content-visibility var(--transition-normal);\n transition-behavior: allow-discrete;\n }\n\n /* Content padding (works for both approaches) */\n & > :not(summary) > * {\n padding-inline: var(--spacing-4);\n padding-block: var(--spacing-3);\n }\n}\n\n:where(.accordion summary) {\n cursor: pointer;\n padding: var(--spacing-3) var(--spacing-4);\n list-style: none;\n display: flex;\n align-items: center;\n gap: var(--spacing-2);\n border-radius: var(--radius-md);\n transition: background-color var(--transition-fast), box-shadow var(--transition-fast);\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &:hover {\n background-color: var(--color-surface-subtle);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n box-shadow: 0 0 0 3px color-mix(in oklab, var(--color-focus-ring, var(--color-primary-500)) 30%, transparent);\n }\n\n /* Chevron indicator */\n &::after {\n content: \"\";\n margin-inline-start: auto;\n inline-size: 0.7em;\n block-size: 0.7em;\n border-inline-end: 2px solid currentColor;\n border-block-end: 2px solid currentColor;\n transform: rotate(-45deg);\n transition: transform var(--transition-normal);\n }\n}\n\n/* Fallback: grid trick for browsers without ::details-content support */\n@supports not selector(::details-content) {\n :where(.accordion details) {\n & > :not(summary) {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--transition-normal) ease;\n overflow: hidden;\n\n & > * {\n min-block-size: 0;\n }\n }\n\n &[open] > :not(summary) {\n grid-template-rows: 1fr;\n overflow: visible;\n }\n }\n}\n`;\n }\n\n // Legacy #generateToastStyles() removed - was empty/unused\n\n #generateBadgeStyles() {\n return /*css*/ `/* Badge/Pill Styles */\n\n.badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-1) var(--spacing-2);\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-semibold);\n line-height: 1;\n border-radius: var(--radius-full);\n white-space: nowrap;\n vertical-align: middle;\n background-color: var(--color-gray-200);\n color: var(--color-gray-800);\n}\n\n.badge-primary, .badge-secondary, .badge-success, .badge-info, .badge-warning, .badge-danger { color: white; }\n.badge-primary { background-color: var(--color-primary-fill); }\n.badge-secondary { background-color: var(--color-secondary-600); }\n.badge-success { background-color: var(--color-success-fill); }\n.badge-info { background-color: var(--color-info-fill); }\n.badge-warning { background-color: var(--color-warning-fill); }\n.badge-danger { background-color: var(--color-danger-fill); }\n\n.badge-outline {\n background-color: transparent;\n color: var(--color-text-secondary);\n border: var(--border-width-thin) solid currentColor;\n &.badge-primary { color: var(--color-primary-text); }\n &.badge-secondary { color: var(--color-text-secondary); }\n &.badge-success { color: var(--color-success-text); }\n &.badge-info { color: var(--color-info-text); }\n &.badge-warning { color: var(--color-warning-text); }\n &.badge-danger { color: var(--color-danger-text); }\n}\n\n.badge-sm { padding: 2px var(--spacing-1); font-size: 10px; }\n.badge-lg { padding: var(--spacing-2) var(--spacing-3); font-size: var(--font-size-sm); }\n.pill { padding: var(--spacing-1) var(--spacing-3); border-radius: var(--radius-full); }\n\n`;\n }\n\n #generateDialogStyles() {\n const { layout = {}, behavior = {} } = this.options.design;\n const breakpoints = layout.breakpoints || {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n\n return /*css*/ `/* ============================================================================\n Dialog Primitive\n Native <dialog> element with PDS integration\n ============================================================================ */\n\n/* Dialog base styles */\ndialog {\n position: fixed;\n left: 50%;\n top: 50%;\n width: min(600px, calc(100vw - var(--spacing-8)));\n max-width: min(600px, calc(100vw - var(--spacing-8)));\n max-height: calc(100dvh - var(--spacing-8));\n margin: 0;\n padding: 0;\n border: none;\n border-radius: var(--radius-lg);\n \n /* Surface styling - elevated overlay */\n background-color: var(--surface-overlay-bg);\n color: var(--surface-overlay-text);\n box-shadow: 0 8px 32px var(--surface-overlay-shadow);\n \n /* Smooth transitions */\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n transition: \n opacity var(--transition-normal) ease,\n transform var(--transition-normal) ease;\n \n \n}\n\n/* Open state */\ndialog[open] {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n animation: pds-dialog-enter var(--transition-normal) ease;\n}\n\n@keyframes pds-dialog-enter {\n from {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n\n/* Safari fallback: disable scale animation to avoid dialog clipping bugs */\ndialog.dialog-no-scale-animation {\n transform: translate(-50%, -50%);\n transition: opacity var(--transition-normal) ease;\n}\n\ndialog.dialog-no-scale-animation[open] {\n transform: translate(-50%, -50%);\n animation: pds-dialog-fade-enter var(--transition-normal) ease;\n}\n\n@keyframes pds-dialog-fade-enter {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Backdrop styling */\ndialog::backdrop {\n background: var(--backdrop-bg);\n backdrop-filter: var(--backdrop-filter);\n opacity: 0;\n transition: opacity var(--transition-normal) ease;\n}\n\ndialog[open]::backdrop {\n opacity: var(--backdrop-opacity, 1);\n animation: pds-dialog-backdrop-enter var(--transition-normal) ease;\n}\n\n@keyframes pds-dialog-backdrop-enter {\n from { opacity: 0; }\n to { opacity: var(--backdrop-opacity, 1); }\n}\n\n/* Dialog - constrain max height to 90vh, support custom maxHeight via CSS variable */\ndialog {\n max-height: var(--dialog-max-height, 90vh);\n display: flex;\n flex-direction: column;\n overflow: hidden; /* Prevent dialog itself from scrolling - let .dialog-body handle it */\n}\n\n/*\n * Overlay safety valve:\n * Some controls (e.g. pds-daterange panel) need to escape\n * the dialog bounds. Scope overflow visibility to custom dialogs that contain\n * those controls instead of enabling it for all dialogs.\n */\ndialog.dialog-custom:has(pds-daterange) {\n overflow: visible;\n}\n\n/* Form structure - use flexbox instead of contents */\ndialog form {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0; /* Allow flex child to shrink */\n margin: 0;\n}\n\n/* Dialog header */\ndialog {\n header,\n form > header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-4);\n padding: var(--spacing-6);\n border-bottom: var(--border-width-thin) solid var(--surface-overlay-border);\n flex-shrink: 0; \n\n h2,\n h3 {\n margin: 0;\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--surface-overlay-text);\n flex: 1;\n }\n\n /* Close button in header */\n button[value=\"cancel\"],\n .dialog-close {\n background: none;\n border: none;\n padding: var(--spacing-2);\n border-radius: var(--radius-sm);\n cursor: pointer;\n color: var(--surface-overlay-icon);\n transition: background-color var(--transition-fast);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n background-color: var(--color-surface-subtle);\n }\n\n &:focus-visible {\n outline: 2px solid var(--color-focus-ring);\n outline-offset: 2px;\n }\n }\n }\n\n /* Dialog body - scrollable content */\n article,\n form > article,\n .dialog-body {\n flex: 1 1 auto;\n min-height: 0; /* Critical: allow flex child to shrink and scroll */\n padding: var(--spacing-3) var(--spacing-6);\n overflow-y: auto;\n overflow-x: visible;\n }\n\n article:has(pds-daterange),\n form > article:has(pds-daterange),\n .dialog-body:has(pds-daterange) {\n overflow: visible;\n }\n\n /* Dialog footer - actions */\n footer,\n form > footer {\n display: flex;\n flex-direction: row;\n gap: var(--spacing-3);\n justify-content: flex-end;\n align-items: center;\n padding: var(--spacing-6);\n border-top: var(--border-width-thin) solid var(--surface-overlay-border);\n flex-shrink: 0;\n }\n}\n\n/* Dialog size modifiers */\ndialog.dialog-sm { width: min(400px, calc(100vw - var(--spacing-8))); max-width: min(400px, calc(100vw - var(--spacing-8))); }\ndialog.dialog-lg { width: min(800px, calc(100vw - var(--spacing-8))); max-width: min(800px, calc(100vw - var(--spacing-8))); }\ndialog.dialog-xl { width: min(1200px, calc(100vw - var(--spacing-8))); max-width: min(1200px, calc(100vw - var(--spacing-8))); }\ndialog.dialog-full { width: calc(100vw - var(--spacing-8)); max-width: calc(100vw - var(--spacing-8)); max-height: calc(100dvh - var(--spacing-8)); }\n\n/* Mobile responsiveness - maximize on mobile */\n@media (max-width: ${breakpoints.sm - 1}px) {\n dialog,\n dialog.dialog-sm,\n dialog.dialog-lg,\n dialog.dialog-xl,\n dialog.dialog-full,\n dialog.dialog-no-scale-animation,\n dialog.dialog-no-scale-animation[open] {\n left: 0;\n top: 0;\n max-width: 100vw; \n width: 100vw;\n height: 100dvh;\n max-height: 100dvh; \n --dialog-max-height: 100dvh; /* Override custom maxHeight on mobile */\n border-radius: 0; \n margin: 0;\n }\n\n dialog,\n dialog.dialog-sm,\n dialog.dialog-lg,\n dialog.dialog-xl,\n dialog.dialog-full {\n transform: scale(0.98);\n }\n\n dialog[open],\n dialog.dialog-sm[open],\n dialog.dialog-lg[open],\n dialog.dialog-xl[open],\n dialog.dialog-full[open] {\n transform: scale(1);\n animation: pds-dialog-enter-mobile var(--transition-normal) ease;\n }\n\n dialog.dialog-no-scale-animation {\n transition: opacity var(--transition-normal) ease;\n }\n dialog.dialog-no-scale-animation[open] {\n animation: pds-dialog-fade-enter var(--transition-normal) ease;\n }\n @keyframes pds-dialog-enter-mobile {\n from {\n opacity: 0;\n transform: scale(0.98);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n dialog header, dialog form > header, dialog article, dialog form > article, dialog footer, dialog form > footer { padding: var(--spacing-4); }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n dialog, dialog::backdrop { transition-duration: 0.01s !important; }\n}\n\nhtml:has(dialog[open]:modal),\nhtml:has(pds-drawer[open]) {\n overflow: hidden;\n scrollbar-gutter: stable;\n}\n\n\n`;\n }\n\n #generateTabStripStyles() {\n const { layout = {} } = this.options.design;\n const breakpoints = layout.breakpoints || {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n\n return /*css*/ `/* Tab Strip Component */\n\n/* Tab navigation */\n\npds-tabstrip {\n margin-top: var(--spacing-6);\n\n & > nav {\n display: flex;\n gap: var(--spacing-1);\n border-bottom: var(--border-width-medium) solid var(--color-border);\n margin-bottom: var(--spacing-6);\n position: relative;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* IE/Edge */\n\n &::-webkit-scrollbar {\n display: none; /* Chrome/Safari */\n }\n\n /* Tab links */\n & > a {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-2);\n padding: var(--spacing-3) var(--spacing-4);\n font-family: var(--font-family-body);\n font-size: var(--font-size-base);\n font-weight: var(--font-weight-medium);\n color: var(--color-text-secondary);\n text-decoration: none;\n white-space: nowrap;\n border: none;\n background: transparent;\n cursor: pointer;\n transition: color var(--transition-fast);\n border-bottom: var(--border-width-medium) solid transparent;\n margin-bottom: calc(-1 * var(--border-width-medium)); /* Overlap the nav border */\n\n &:hover {\n color: var(--color-text-primary);\n background-color: var(--color-surface-hover);\n }\n\n &:focus-visible {\n outline: var(--focus-ring-width, 2px) solid var(--color-focus-ring, var(--color-primary-500));\n outline-offset: -2px;\n border-radius: var(--radius-sm);\n z-index: 1;\n }\n\n /* Active tab */\n &[aria-current=\"page\"] {\n color: var(--color-link);\n font-weight: var(--font-weight-semibold);\n border-bottom-color: var(--color-link);\n\n &:hover {\n color: var(--color-link-hover);\n border-bottom-color: var(--color-link-hover);\n background-color: color-mix(in oklab, var(--color-link) 10%, transparent);\n }\n }\n }\n }\n\n /* Tab panel */\n & > pds-tabpanel {\n display: block;\n margin-top: var(--spacing-4);\n\n &[data-tabpanel] {\n animation: tabFadeIn var(--transition-normal) ease-out;\n padding: var(--spacing-4) 0;\n\n &[hidden] {\n display: none;\n }\n }\n }\n}\n\n@keyframes tabFadeIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* Mobile responsive */\n@media (max-width: ${breakpoints.sm - 1}px) {\n pds-tabstrip > nav { gap: var(--spacing-1); }\n pds-tabstrip > nav > a { padding: var(--spacing-2) var(--spacing-3); font-size: var(--font-size-sm); }\n pds-tabstrip > pds-tabpanel[data-tabpanel] { padding: var(--spacing-3) 0; }\n}\n\n`;\n }\n\n #generateScrollbarStyles() {\n return /*css*/ `/* Custom Scrollbars */\n::-webkit-scrollbar { width: 12px; height: 12px; }\n::-webkit-scrollbar-track { background: transparent; }\n::-webkit-scrollbar-thumb {\n background: var(--color-secondary-300);\n border-radius: var(--radius-full);\n border: var(--border-width-thick) solid transparent;\n background-clip: padding-box;\n transition: background-color var(--transition-fast);\n &:hover { background: var(--color-secondary-400); border: var(--border-width-medium) solid transparent; background-clip: padding-box; }\n &:active { background: var(--color-secondary-500); border: var(--border-width-medium) solid transparent; background-clip: padding-box; }\n @media (prefers-color-scheme: dark) {\n background: var(--color-secondary-600);\n &:hover { background: var(--color-secondary-500); }\n &:active { background: var(--color-secondary-400); }\n }\n}\n\n* {\n scrollbar-width: thin;\n scrollbar-color: var(--color-secondary-300) transparent;\n @media (prefers-color-scheme: dark) { scrollbar-color: var(--color-secondary-600) transparent; }\n}\n*:hover { scrollbar-color: var(--color-secondary-400) transparent; }\n@media (prefers-color-scheme: dark) { *:hover { scrollbar-color: var(--color-secondary-500) transparent; } }\n\n`;\n }\n\n #generateIconStyles() {\n const { layout = {} } = this.options.design;\n const minButtonHeight = layout.buttonMinHeight || 30;\n const buttonPaddingValue = layout.buttonPadding || 1.0;\n const buttonPaddingDefault = `max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2))`;\n const buttonPaddingSm = `calc(max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2)) * 0.85)`;\n const buttonPaddingXs = `calc(max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2)) * 0.7)`;\n const buttonPaddingLg = `calc(max(calc(var(--spacing-1) * ${buttonPaddingValue}), var(--spacing-2)) * 1.15)`;\n const iconOnlyPaddingScale = 0.72;\n const iconOnlyPaddingDefault = `calc(${buttonPaddingDefault} * ${iconOnlyPaddingScale})`;\n const iconOnlyPaddingSm = `calc(${buttonPaddingSm} * ${iconOnlyPaddingScale})`;\n const iconOnlyPaddingXs = `calc(${buttonPaddingXs} * ${iconOnlyPaddingScale})`;\n const iconOnlyPaddingLg = `calc(${buttonPaddingLg} * ${iconOnlyPaddingScale})`;\n const iconOnlyMinDefault = `${minButtonHeight}px`;\n const iconOnlyMinSm = `calc(${minButtonHeight}px * 0.85)`;\n const iconOnlyMinXs = `calc(${minButtonHeight}px * 0.7)`;\n const iconOnlyMinLg = `calc(${minButtonHeight}px * 1.15)`;\n const iconOnlySizeDefault = `max(${iconOnlyMinDefault}, calc(var(--font-size-base) + (${buttonPaddingDefault} * 2) + (var(--border-width-medium) * 2)))`;\n const iconOnlySizeSm = `max(${iconOnlyMinSm}, calc(var(--font-size-sm) + (${buttonPaddingSm} * 2) + (var(--border-width-medium) * 2)))`;\n const iconOnlySizeXs = `max(${iconOnlyMinXs}, calc(var(--font-size-xs) + (${buttonPaddingXs} * 2) + (var(--border-width-medium) * 2)))`;\n const iconOnlySizeLg = `max(${iconOnlyMinLg}, calc(var(--font-size-lg) + (${buttonPaddingLg} * 2) + (var(--border-width-medium) * 2)))`;\n\n return /*css*/ `/* Icon System */\n\npds-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n vertical-align: middle;\n pointer-events: none;\n}\n\n/* Icon size utilities */\n.icon-xs, pds-icon[size=\"xs\"] { width: var(--icon-size-xs); height: var(--icon-size-xs); }\n.icon-sm, pds-icon[size=\"sm\"] { width: var(--icon-size-sm); height: var(--icon-size-sm); }\n.icon-md, pds-icon[size=\"md\"] { width: var(--icon-size-md); height: var(--icon-size-md); }\n.icon-lg, pds-icon[size=\"lg\"] { width: var(--icon-size-lg); height: var(--icon-size-lg); }\n.icon-xl, pds-icon[size=\"xl\"] { width: var(--icon-size-xl); height: var(--icon-size-xl); }\n.icon-2xl, pds-icon[size=\"2xl\"] { width: var(--icon-size-2xl); height: var(--icon-size-2xl); }\n.icon-32xl, pds-icon[size=\"3xl\"] { width: var(--icon-size-3xl); height: var(--icon-size-3xl); }\n\n\n/* Icon color utilities */\n.icon-primary, pds-icon.primary { color: var(--color-primary-text); }\n.icon-secondary, pds-icon.secondary { color: var(--color-text-secondary); }\n.icon-accent, pds-icon.accent { color: var(--color-accent-text); }\n.icon-success, pds-icon.success { color: var(--color-success-text); }\n.icon-warning, pds-icon.warning { color: var(--color-warning-text); }\n.icon-danger, pds-icon.danger { color: var(--color-danger-text); }\n.icon-info, pds-icon.info { color: var(--color-info-text); }\n.icon-muted, pds-icon.muted { color: var(--color-text-muted); }\n.icon-subtle, pds-icon.subtle { color: var(--color-text-subtle); }\n\n/* Icon with text combinations */\n.icon-text { display: inline-flex; align-items: center; gap: var(--spacing-2); }\n.icon-text-start { flex-direction: row; }\n.icon-text-end { flex-direction: row-reverse; }\n\n/* Button icon utilities */\nbutton,\na.btn,\na.btn-primary,\na.btn-secondary,\na.btn-outline,\na.btn-danger,\na.icon-only {\n pds-icon,\n pds-icon[size] {\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n }\n\n &.icon-only {\n padding: ${iconOnlyPaddingDefault};\n min-width: ${iconOnlySizeDefault};\n min-height: ${iconOnlySizeDefault};\n width: ${iconOnlySizeDefault};\n height: ${iconOnlySizeDefault};\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n pds-icon,\n pds-icon[size] {\n width: 1.2em;\n height: 1.2em;\n }\n }\n\n &.btn-sm.icon-only {\n padding: ${iconOnlyPaddingSm};\n min-width: ${iconOnlySizeSm};\n min-height: ${iconOnlySizeSm};\n width: ${iconOnlySizeSm};\n height: ${iconOnlySizeSm};\n\n pds-icon,\n pds-icon[size] {\n width: 1.15em;\n height: 1.15em;\n }\n }\n\n &.btn-xs.icon-only {\n padding: ${iconOnlyPaddingXs};\n min-width: ${iconOnlySizeXs};\n min-height: ${iconOnlySizeXs};\n width: ${iconOnlySizeXs};\n height: ${iconOnlySizeXs};\n\n pds-icon,\n pds-icon[size] {\n width: 1.1em;\n height: 1.1em;\n }\n }\n\n &.btn-lg.icon-only {\n padding: ${iconOnlyPaddingLg};\n min-width: ${iconOnlySizeLg};\n min-height: ${iconOnlySizeLg};\n width: ${iconOnlySizeLg};\n height: ${iconOnlySizeLg};\n\n pds-icon,\n pds-icon[size] {\n width: 1.25em;\n height: 1.25em;\n }\n }\n}\n\n/* Icon in inputs */\n.input-icon, .input-icon-end {\n position: relative;\n display: flex;\n align-items: center;\n pds-icon { position: absolute; color: var(--color-text-muted); pointer-events: none; width: var(--icon-size-md); height: var(--icon-size-md); }\n}\n.input-icon {\n pds-icon { left: var(--spacing-3); }\n input { padding-left: calc(var(--icon-size-md) + var(--spacing-6)); width: 100%; }\n}\n.input-icon-end {\n pds-icon { left: unset; right: var(--spacing-3); }\n input { padding-left: var(--spacing-4); padding-right: calc(var(--icon-size-md) + var(--spacing-6)); width: 100%; }\n}\n\n`;\n }\n\n #generateDropdownStyles() {\n return /*css*/ `/* Dropdown Component */\n\n/* Basic dropdown host */\nnav[data-dropdown] {\n position: relative;\n display: flex;\n padding: 0;\n\n & > :last-child {\n position: absolute;\n padding: 0 var(--spacing-2);\n margin: 0;\n background: var(--color-surface-overlay);\n border: var(--border-width-thin) solid var(--color-border);\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-lg);\n top: 100%;\n bottom: auto;\n left: 0;\n right: auto;\n margin-top: var(--spacing-2);\n --dropdown-transition-duration: var(--transition-fast, 160ms);\n min-width: var(--dropdown-min-width, 12rem);\n width: max-content;\n inline-size: max-content;\n max-width: none;\n max-inline-size: none;\n opacity: 0;\n visibility: hidden;\n display: none;\n pointer-events: none;\n transform-origin: top center;\n z-index: var(--z-dropdown, 1050);\n max-height: min(60vh, 24rem);\n overflow-x: hidden;\n overflow-y: auto;\n transition:\n opacity var(--dropdown-transition-duration) ease,\n visibility 0s linear var(--dropdown-transition-duration),\n display 0s linear var(--dropdown-transition-duration);\n transition-behavior: allow-discrete;\n }\n\n & > :last-child[popover] {\n inset: auto;\n margin: 0;\n }\n\n & > :last-child[aria-hidden=\"false\"],\n & > :last-child:popover-open {\n display: inline-block;\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transition:\n opacity var(--dropdown-transition-duration) ease,\n visibility 0s linear 0s,\n display 0s linear 0s;\n }\n\n menu {\n list-style: none;\n }\n\n menu li {\n padding: var(--spacing-2) 0;\n\n & + li {\n border-top: var(--border-width-thin) solid var(--color-border);\n margin-top: var(--spacing-2);\n }\n\n &:has(> hr) {\n border-top: none;\n margin-top: 0;\n padding: 0;\n\n & + li {\n border-top: none;\n margin-top: 0;\n }\n }\n\n & > hr {\n border: none;\n border-top: var(--border-width-thick) solid var(--color-border);\n margin: var(--spacing-2) 0;\n }\n }\n\n menu a {\n display: flex;\n color: var(--color-text-primary);\n text-decoration: none;\n align-items: center;\n gap: var(--spacing-2);\n\n &.danger {\n color: var(--color-danger-text);\n }\n }\n\n &.align-right,\n &[data-align=\"right\"],\n &[data-align=\"end\"],\n &[data-dropdown-align=\"right\"],\n &[data-dropdown-align=\"end\"] {\n & > :last-child {\n left: auto;\n right: 0;\n }\n }\n\n &[data-mode=\"up\"],\n &[data-dropdown-direction=\"up\"] {\n & > :last-child {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--spacing-2);\n transform-origin: bottom center;\n }\n }\n\n &[data-mode=\"down\"],\n &[data-dropdown-direction=\"down\"] {\n & > :last-child {\n top: 100%;\n bottom: auto;\n margin-top: var(--spacing-2);\n margin-bottom: 0;\n transform-origin: top center;\n }\n }\n\n &[data-mode=\"auto\"]:not([data-dropdown-direction]) > :last-child {\n top: 100%;\n bottom: auto;\n margin-top: var(--spacing-2);\n margin-bottom: 0;\n transform-origin: top center;\n }\n\n @media (prefers-reduced-motion: reduce) {\n & > :last-child {\n transition-duration: 0.01s !important;\n }\n }\n}\n\n@starting-style {\n nav[data-dropdown] > :last-child[aria-hidden=\"false\"],\n nav[data-dropdown] > :last-child:popover-open {\n opacity: 0;\n }\n}\n`;\n }\n\n #generateLayoutUtilities() {\n const { layout = {} } = this.options.design;\n const breakpoints = layout.breakpoints || {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n\n const gridSystem = layout.gridSystem || {};\n const columns = gridSystem.columns || [1, 2, 3, 4, 6];\n const autoFitBreakpoints = gridSystem.autoFitBreakpoints || {\n sm: \"150px\",\n md: \"250px\",\n lg: \"350px\",\n xl: \"450px\",\n };\n\n const layoutMaxWidths = this.#resolveLayoutMaxWidths(layout);\n\n const sections = [\n /*css*/ `\n/* ============================================================================\n Layout Utilities\n Modern grid and flex system for building responsive layouts\n ============================================================================ */\n\n/* Container */\n.container {\n display: block;\n width: 100%;\n max-width: ${layout.containerMaxWidth || \"1400px\"};\n margin: 0 auto;\n padding: ${layout.containerPadding || \"var(--spacing-6)\"};\n}\n\n/* Grid System */\n.grid {\n display: grid;\n gap: var(--spacing-4);\n}\n\n`,\n ];\n\n // Generate fixed column grids\n for (const col of columns) {\n sections.push(\n `.grid-cols-${col} { grid-template-columns: repeat(${col}, 1fr); }\\n`,\n );\n }\n\n sections.push(\"\\n/* Auto-fit grids (responsive) */\\n\");\n // Generate auto-fit responsive grids\n for (const [name, minWidth] of Object.entries(autoFitBreakpoints)) {\n sections.push(\n `.grid-auto-${name} { grid-template-columns: repeat(auto-fit, minmax(${minWidth}, 1fr)); }\\n`,\n );\n }\n\n // Generate gap utilities\n\n sections.push(/*css*/ `\n/* Gap utilities */\n.gap-0 { gap: 0; } .gap-xs { gap: var(--spacing-1); } .gap-sm { gap: var(--spacing-2); } .gap-md { gap: var(--spacing-4); } .gap-lg { gap: var(--spacing-6); } .gap-xl { gap: var(--spacing-8); }\n\n`);\n\n sections.push(/*css*/ `\n/* Flexbox System */\n.flex { display: flex; }\n.flex-wrap { flex-wrap: wrap; }\n.flex-col { flex-direction: column; }\n.flex-row { flex-direction: row; }\n.grow { flex: 1 1 0%; }\n\n/* Alignment utilities */\n.items-start { align-items: flex-start; } .items-center { align-items: center; } .items-end { align-items: flex-end; } .items-stretch { align-items: stretch; } .items-baseline { align-items: baseline; }\n.justify-start { justify-content: flex-start; } .justify-center { justify-content: center; } .justify-end { justify-content: flex-end; } .justify-between { justify-content: space-between; } .justify-around { justify-content: space-around; } .justify-evenly { justify-content: space-evenly; }\n.text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; }\n\n/* Text overflow utility */\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Required Legend Utility */\n:where(.required-legend) {\n display: block;\n margin: var(--spacing-3) 0;\n color: var(--color-text-muted);\n}\n\n/* Max-width utilities */\n.max-w-sm { max-width: var(--layout-max-width-sm, ${layoutMaxWidths.sm}); } .max-w-md { max-width: var(--layout-max-width-md, ${layoutMaxWidths.md}); } .max-w-lg { max-width: var(--layout-max-width-lg, ${layoutMaxWidths.lg}); } .max-w-xl { max-width: var(--layout-max-width-xl, ${layoutMaxWidths.xl}); }\n\n/* Stack utilities - vertical rhythm for stacked elements */\n[class^=\"stack-\"], [class*=\" stack-\"] {\n display: flex;\n flex-direction: column;\n}\n.stack-xs { gap: var(--spacing-1); }\n.stack-sm { gap: var(--spacing-2); }\n.stack-md { gap: var(--spacing-4); }\n.stack-lg { gap: var(--spacing-6); }\n.stack-xl { gap: var(--spacing-8); }\n\n/* Section spacing - for major content blocks */\n.section { padding-block: var(--spacing-8); }\n.section-lg { padding-block: var(--spacing-12); }\n\n/* Responsive helpers */\n@media (max-width: ${breakpoints.md - 1}px) {\n .mobile-stack { flex-direction: column; }\n .mobile-stack > * { width: 100%; }\n}\n\n/* ============================================================================\n Backdrop Utilities\n Reusable backdrop layer for modal components (dialogs, drawers, overlays)\n ============================================================================ */\n\n/* Base backdrop class for modal overlays */\n.backdrop {\n position: fixed;\n inset: 0;\n background: var(--backdrop-bg);\n backdrop-filter: var(--backdrop-filter);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n z-index: var(--z-modal, 1040);\n\n &.active {\n opacity: var(--backdrop-opacity, 1);\n pointer-events: auto;\n }\n}\n\n/* Backdrop variants */\n.backdrop-light { --backdrop-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2)); --backdrop-brightness: 1.1; }\n.backdrop-dark { --backdrop-bg: linear-gradient(135deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.5)); --backdrop-brightness: 0.6; }\n.backdrop-blur-sm { --backdrop-blur: 5px; } .backdrop-blur-md { --backdrop-blur: 10px; } .backdrop-blur-lg { --backdrop-blur: 20px; }\n`);\n\n return sections.join(\"\");\n }\n\n #generateMediaUtilities() {\n return /*css*/ `/* Media Element Utilities */\n\n/* Gallery images */\n.img-gallery {\n width: 100%;\n height: auto;\n aspect-ratio: 1;\n object-fit: cover;\n border-radius: var(--radius-sm);\n}\n\n/* Responsive images with different radius sizes */\n.img-rounded-sm { border-radius: var(--radius-sm); } .img-rounded-md { border-radius: var(--radius-md); } .img-rounded-lg { border-radius: var(--radius-lg); } .img-rounded-xl { border-radius: var(--radius-xl); } .img-rounded-full { border-radius: var(--radius-full); }\n\n/* Inline images */\n.img-inline {\n display: inline;\n vertical-align: middle;\n border-radius: var(--radius-xs);\n margin: 0 var(--spacing-1);\n max-width: 60px;\n height: auto;\n}\n\n/* Video specific utilities */\n.video-responsive {\n width: 100%;\n max-width: 600px;\n height: auto;\n border-radius: var(--radius-md);\n}\n\n/* Figure utilities */\n.figure-responsive {\n width: 100%;\n height: auto;\n}\n\n`;\n }\n\n #generateMediaQueries() {\n const { layout = {}, a11y = {} } = this.options.design;\n const breakpoints = layout.breakpoints || {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n const minTouchTarget =\n a11y.minTouchTarget || enums.TouchTargetSizes.standard;\n\n return /*css*/ `/* Mobile-First Responsive Design */\n\n/* Small devices (${breakpoints.sm}px and up) */\n@media (min-width: ${breakpoints.sm}px) {\n .sm\\\\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); } .sm\\\\:flex-row { flex-direction: row; } .sm\\\\:text-sm { font-size: var(--font-size-sm); } .sm\\\\:p-6 { padding: var(--spacing-6); } .sm\\\\:gap-6 { gap: var(--spacing-6); } .sm\\\\:hidden { display: none; } .sm\\\\:block { display: block; }\n}\n\n/* Medium devices (${breakpoints.md}px and up) */\n@media (min-width: ${breakpoints.md}px) {\n .md\\\\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); } .md\\\\:text-lg { font-size: var(--font-size-lg); } .md\\\\:p-8 { padding: var(--spacing-8); } .md\\\\:gap-8 { gap: var(--spacing-8); } .md\\\\:flex-row { flex-direction: row; } .md\\\\:w-1\\\\/2 { width: 50%; } .md\\\\:w-1\\\\/3 { width: 33.333333%; } .md\\\\:hidden { display: none; } .md\\\\:block { display: block; }\n}\n\n/* Large devices (${breakpoints.lg}px and up) */\n@media (min-width: ${breakpoints.lg}px) {\n .lg\\\\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); } .lg\\\\:text-xl { font-size: var(--font-size-xl); } .lg\\\\:p-12 { padding: var(--spacing-12); } .lg\\\\:gap-12 { gap: var(--spacing-12); } .lg\\\\:w-1\\\\/4 { width: 25%; } .lg\\\\:hidden { display: none; } .lg\\\\:block { display: block; }\n}\n\n/* Touch device optimizations */\n@media (pointer: coarse) {\n /* Touch devices - larger touch targets for interactive elements */\n select, textarea,\n input:not([type=\"radio\"]):not([type=\"checkbox\"]) {\n min-height: ${minTouchTarget}px;\n min-width: ${minTouchTarget}px;\n }\n \n /* Radio and checkbox inputs: keep reasonable size but ensure label tap area is large */\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n /* Keep native size - labels provide the touch target */\n min-height: unset;\n min-width: unset;\n }\n \n /* Ensure labels with radio/checkbox have adequate touch targets */\n /* Exclude button-style fieldsets which already have proper sizing */\n label:has(input[type=\"radio\"]):not(fieldset.buttons label),\n label:has(input[type=\"checkbox\"]):not(fieldset.buttons label),\n fieldset[role=\"radiogroup\"]:not(.buttons) label,\n fieldset[role=\"group\"]:not(.buttons) label {\n min-height: ${minTouchTarget}px;\n display: inline-flex;\n align-items: center;\n padding: var(--spacing-2) 0;\n }\n \n /* Disable hover effects\n on touch devices */\n .card {\n &:hover {\n box-shadow: var(--shadow-base);\n }\n }\n \n a {\n &:hover {\n color: var(--color-link-hover);\n }\n }\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n scroll-behavior: auto !important;\n }\n}\n\n/* High contrast mode */\n@media (prefers-contrast: high) {\n :root {\n --color-primary-600: #0000ff;\n --color-primary-700: #0000cc;\n }\n \n button, input, textarea, select {\n border-width: var(--border-width-medium);\n }\n}\n\n/* Print styles */\n@media print {\n *, *::before, *::after {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n }\n \n a, a:visited {\n text-decoration: underline;\n }\n \n button {\n display: none;\n }\n \n .mobile-hidden, .desktop-hidden {\n display: block !important;\n }\n}\n\n`;\n }\n\n // Utility methods for color manipulation\n #hexToHsl(hex) {\n const r = parseInt(hex.slice(1, 3), 16) / 255;\n const g = parseInt(hex.slice(3, 5), 16) / 255;\n const b = parseInt(hex.slice(5, 7), 16) / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h,\n s,\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return { h: h * 360, s: s * 100, l: l * 100 };\n }\n\n #hslToHex(h, s, l) {\n h = h / 360;\n s = s / 100;\n l = l / 100;\n\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n const toHex = (c) => {\n const hex = Math.round(c * 255).toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }\n\n // Method to get current tokens (useful for debugging)\n getTokens() {\n return this.tokens;\n }\n\n // Method to export CSS (useful for build processes)\n exportCSS() {\n return this.layeredCSS;\n }\n\n // ========================================================================\n // LAYER SEPARATION ARCHITECTURE (Best Practices 2025)\n // ========================================================================\n\n /**\n * Generate separate CSS layers: tokens, primitives, components, utilities\n * Following the cascade layers pattern from the best practices document\n */\n #generateLayers() {\n this.#layers = {\n tokens: this.#generateTokensLayer(),\n primitives: this.#generatePrimitivesLayer(),\n components: this.#generateComponentsLayer(),\n utilities: this.#generateUtilitiesLayer(),\n };\n\n if (this.options.debug) {\n this.options.log?.(\"debug\", \"[Generator] Layer sizes:\", {\n tokens: `${(this.#layers.tokens.length / 1024).toFixed(2)} KB`,\n primitives: `${(this.#layers.primitives.length / 1024).toFixed(2)} KB`,\n components: `${(this.#layers.components.length / 1024).toFixed(2)} KB`,\n utilities: `${(this.#layers.utilities.length / 1024).toFixed(2)} KB`,\n });\n }\n }\n\n #generateTokensLayer() {\n const {\n colors,\n spacing,\n radius,\n borderWidths,\n typography,\n shadows,\n darkShadows,\n layout,\n transitions,\n zIndex,\n icons,\n } = this.tokens;\n\n const sections = [\n /*css*/ `@layer tokens {\n :root {\n ${this.#generateColorVariables(colors)}\n ${this.#generateSpacingVariables(spacing)}\n ${this.#generateRadiusVariables(radius)}\n ${this.#generateBorderWidthVariables(borderWidths)}\n ${this.#generateTypographyVariables(typography)}\n ${this.#generateShadowVariables(shadows)}\n ${this.#generateLayoutVariables(layout)}\n ${this.#generateTransitionVariables(transitions)}\n ${this.#generateZIndexVariables(zIndex)}\n ${this.#generateIconVariables(icons)}\n }\n ${this.#generateDarkVariablesForTokensLayer(colors, darkShadows)}\n }`,\n ];\n\n // Important: emit a non-layered dark variables block so that manual\n // html[data-theme=\"dark\"] wins even if the page has older, unlayered\n // PDS CSS loaded. Unlayered declarations outrank layered ones in the\n // cascade; this small non-layered override ensures correct theming.\n sections.push(\n `\\n/* Non-layered dark variables fallback (ensures attribute wins) */\\n`,\n );\n sections.push(this.#generateDarkVariablesOnly(colors, darkShadows));\n\n return sections.join(\"\");\n }\n\n #generatePrimitivesLayer() {\n const { advanced = {}, a11y = {}, layout = {} } = this.options.design;\n const tabSize = advanced.tabSize || enums.TabSizes.standard;\n const minTouchTarget =\n a11y.minTouchTarget || enums.TouchTargetSizes.standard;\n const breakpoints = layout.breakpoints || {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n };\n\n // Primitives = baseline UA-reset + token-driven styles for native elements\n // No component classes, only element selectors with :where() for zero specificity\n return /*css*/ `@layer primitives {\n /* Base HTML reset */\n *, *::before, *::after {\n box-sizing: border-box;\n }\n\n :where(html) {\n interpolate-size: allow-keywords;\n font-family: var(--font-family-body);\n font-size: var(--font-size-base);\n line-height: var(--font-line-height-normal);\n color: var(--color-text-primary);\n background-color: var(--color-surface-base);\n -webkit-text-size-adjust: 100%;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n tab-size: ${tabSize};\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0.1);\n }\n\n :where(dialog){\n background-color: transparent;\n min-width: 320px;\n border: none;\n }\n\n :where(body) {\n margin: 0;\n padding: 0;\n scroll-behavior: smooth;\n min-height: 100vh;\n min-height: var(--layout-min-height, 100vh);\n overflow-x: hidden;\n -webkit-overflow-scrolling: touch;\n }\n\n :where(body.drawer-open) {\n /* overflow: hidden; */\n /* scrollbar-gutter: stable; */\n }\n\n /* Button primitives */\n :where(button) {\n all: unset;\n box-sizing: border-box;\n font: inherit;\n color: var(--color-primary-contrast, white);\n background: var(--color-primary-fill);\n padding: var(--spacing-2) var(--spacing-4);\n border: 0;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: opacity var(--transition-fast), background-color var(--transition-fast);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-2);\n font-weight: var(--font-weight-medium);\n line-height: 1.5;\n min-height: ${minTouchTarget}px;\n touch-action: manipulation;\n user-select: none;\n }\n\n :where(button):hover:not(:disabled) {\n opacity: 0.9;\n background-color: var(--color-primary-fill-hover);\n }\n\n :where(button):focus-visible {\n outline: 2px solid var(--color-focus-ring, var(--color-primary-500));\n outline-offset: 2px;\n }\n\n :where(button):disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n :where(button):active:not(:disabled) {\n transform: scale(0.98);\n }\n\n /* Input primitives */\n :where(input:not([type=\"radio\"]):not([type=\"checkbox\"]):not([type=\"range\"]):not([type=\"color\"])),\n :where(select),\n :where(textarea) {\n font: inherit;\n color: var(--color-text-primary);\n background: var(--color-input-bg);\n border: var(--border-width-thin) solid var(--color-border);\n border-radius: var(--radius-md);\n padding: var(--spacing-2) var(--spacing-3);\n min-height: 40px;\n width: 100%;\n transition: border-color var(--transition-fast), box-shadow var(--transition-fast);\n appearance: none;\n }\n\n :where(input):focus-visible,\n :where(select):focus-visible,\n :where(textarea):focus-visible {\n outline: none;\n border-color: var(--color-focus-ring, var(--color-primary-500));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-focus-ring, var(--color-primary-500)) 30%, transparent);\n }\n\n :where(input):disabled,\n :where(select):disabled,\n :where(textarea):disabled {\n opacity: 0.6;\n cursor: not-allowed;\n background-color: var(--color-input-disabled-bg);\n }\n\n /* Harmonized placeholder styling */\n :where(input)::placeholder,\n :where(textarea)::placeholder,\n :where(pds-richtext)::placeholder {\n color: var(--color-text-muted);\n opacity: 1;\n font-weight: var(--font-weight-normal);\n }\n\n :where(textarea) {\n min-height: 80px;\n resize: vertical;\n }\n\n /* Link primitives */\n :where(a) {\n color: var(--color-link, var(--color-primary-text, var(--color-primary-600)));\n text-decoration: underline;\n text-underline-offset: 0.2em;\n transition: color var(--transition-fast), opacity var(--transition-fast);\n }\n\n :where(a):hover {\n color: var(--color-link-hover, var(--color-link, var(--color-primary-text, var(--color-primary-600))));\n opacity: 0.9;\n }\n\n :where(a):visited {\n color: var(--color-link-visited, var(--color-link, var(--color-primary-text, var(--color-primary-600))));\n }\n\n :where(a):focus-visible {\n outline: 2px solid var(--color-focus-ring, var(--color-primary-500));\n outline-offset: 2px;\n border-radius: var(--radius-sm);\n }\n\n ::selection {\n background: var(--color-selection-bg, var(--color-primary-text, var(--color-primary-600)));\n color: var(--color-selection-text, var(--color-primary-contrast, #ffffff));\n }\n\n /* Form primitives */\n :where(label) {\n display: block;\n font-weight: var(--font-weight-medium);\n margin-bottom: var(--spacing-2);\n color: var(--color-text-primary);\n font-size: var(--font-size-sm);\n }\n\n /* Checkbox enhancement - visually hide native input but keep accessible\n Excludes button-style checkboxes in fieldsets and special containers */\n :where(\n label:not(fieldset label, .checkbox-container label, [data-toggle]):has(input[type=\"checkbox\"])\n ) {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-2);\n cursor: pointer;\n user-select: none;\n position: relative;\n padding-left: calc(var(--spacing-5) + var(--spacing-3));\n\n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n }\n\n &::before {\n content: \"\";\n position: absolute;\n left: 0;\n top: 50%;\n transform: translateY(-50%);\n width: var(--spacing-5);\n height: var(--spacing-5);\n border: var(--border-width-medium) solid var(--color-border);\n border-radius: var(--radius-sm);\n background: var(--color-surface-base);\n transition: all var(--transition-fast);\n flex-shrink: 0;\n }\n\n &:has(input[type=\"checkbox\"]:checked)::after {\n content: \"\";\n position: absolute;\n left: var(--spacing-2);\n top: 50%;\n transform: translateY(-60%) rotate(45deg);\n width: var(--spacing-1-5);\n height: var(--spacing-3);\n border: solid var(--color-primary-contrast, white);\n border-width: 0 2px 2px 0;\n }\n\n &:has(input[type=\"checkbox\"]:checked)::before {\n background: var(--color-primary-fill);\n border-color: var(--color-primary-fill);\n }\n\n &:has(input[type=\"checkbox\"]:focus)::before {\n outline: 2px solid var(--color-focus-ring, var(--color-primary-500));\n outline-offset: 2px;\n }\n\n &:has(input[type=\"checkbox\"]:not(:disabled)):hover::before {\n border-color: var(--color-primary-fill);\n background: var(--color-surface-subtle);\n }\n\n &:has(input[type=\"checkbox\"]:checked:not(:disabled)):hover::before {\n background: var(--color-primary-fill-hover);\n border-color: var(--color-primary-fill-hover);\n }\n\n &:has(input[type=\"checkbox\"]:disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n\n :where(fieldset) {\n border: none;\n }\n\n :where(legend) {\n display: block;\n font-weight: var(--font-weight-semibold);\n padding: 0;\n color: var(--color-text-primary);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n margin: 0 0 var(--spacing-3) 0;\n border: none;\n line-height: var(--font-line-height-tight);\n font-size: var(--font-size-lg);\n background: transparent; /* avoid browser default notch behavior */\n width: auto;\n box-sizing: border-box;\n }\n\n \n /* List primitives */\n :where(ul, ol) {\n padding-left: var(--spacing-6);\n margin: var(--spacing-3) 0;\n }\n\n :where(li) {\n margin: var(--spacing-1) 0;\n }\n\n /* Typography primitives */\n :where(h1, h2, h3, h4, h5, h6) {\n font-family: var(--font-family-headings);\n font-weight: var(--font-weight-bold);\n line-height: var(--font-line-height-tight);\n margin: var(--spacing-4) 0 var(--spacing-3) 0;\n color: var(--color-text-primary);\n word-wrap: break-word;\n hyphens: auto;\n overflow-wrap: break-word;\n }\n\n /* Mobile-first heading sizes */\n :where(h1) { font-size: var(--font-size-2xl); }\n :where(h2) { font-size: var(--font-size-xl); }\n :where(h3) { font-size: var(--font-size-lg); }\n :where(h4) { font-size: var(--font-size-base); }\n :where(h5) { font-size: var(--font-size-sm); }\n :where(h6) { font-size: var(--font-size-xs); }\n\n /* Scale up on larger screens */\n @media (min-width: ${breakpoints.sm}px) {\n :where(h1) { font-size: var(--font-size-3xl); }\n :where(h2) { font-size: var(--font-size-2xl); }\n :where(h3) { font-size: var(--font-size-xl); }\n :where(h4) { font-size: var(--font-size-lg); }\n :where(h5) { font-size: var(--font-size-base); }\n :where(h6) { font-size: var(--font-size-sm); }\n }\n\n :where(p) {\n margin: var(--spacing-3) 0;\n line-height: var(--font-line-height-relaxed);\n color: var(--color-text-primary);\n }\n\n /* Code primitives */\n :where(code) {\n font-family: var(--font-family-mono, monospace);\n font-size: 0.9em;\n background: var(--color-surface-muted);\n padding: 0.2em 0.4em;\n border-radius: var(--radius-sm);\n color: var(--color-text-primary);\n }\n\n :where(pre) {\n font-family: var(--font-family-mono, monospace);\n background: var(--color-surface-muted);\n padding: var(--spacing-4);\n border-radius: var(--radius-md);\n overflow-x: auto;\n margin: var(--spacing-4) 0;\n }\n\n :where(pre code) {\n background: none;\n padding: 0;\n }\n\n /* Media primitives */\n :where(img, video) { \n border-radius: var(--radius-sm);\n }\n\n :where(img:not([height]):not([width]), video:not([height]):not([width])) {\n height: auto;\n max-width: 100%; \n }\n\n :where(figure) {\n margin: 0 0 var(--spacing-6) 0;\n }\n\n :where(figcaption) {\n margin-top: var(--spacing-3);\n font-size: var(--font-size-sm);\n color: var(--color-text-secondary);\n line-height: var(--font-line-height-relaxed);\n }\n\n \n :where([hidden]) {\n display: none !important;\n }\n}\n\n`;\n }\n\n #generateComponentsLayer() {\n return /*css*/`@layer components {\\n\n${this.#generateSemanticHTMLStyles()}\n\n${this.#generateFormStyles()}\n\n${this.#generateCalloutStyles()}\n\n${this.#generateBadgeStyles()}\n\n${this.#generateDialogStyles()}\n\n${this.#generateAccordionStyles()}\n\n${this.#generateDropdownStyles()}\n\n${this.#generateTabStripStyles()}\n\n${this.#generateTableStyles()}\n\n/* Card component */\n\n.card {\n background: var(--color-surface-base);\n border-radius: var(--radius-md);\n padding: var(--spacing-4);\n}\n\n:where(.card:has(> header):has(> footer)) {\n display: grid;\n grid-template-rows: auto 1fr auto;\n gap: var(--spacing-4);\n}\n\n:where(.card > footer) {\n display: flex;\n justify-content: space-evenly;\n}\n\n:where(.card > header > :last-child:not(:first-child)) {\n color: var(--color-text-muted);\n}\n\n.card-elevated {\n background: var(--color-surface-elevated);\n box-shadow: var(--shadow-md);\n}\n\n.card-outlined,\n.card-basic {\n background: var(--color-surface-base);\n border: var(--border-width-thin) solid var(--color-border);\n}\n\n.card-interactive:hover {\n transform: translateY(-2px);\n box-shadow: var(--shadow-lg);\n transition: transform var(--transition-fast), box-shadow var(--transition-fast);\n}\n\n${this.#generateScrollbarStyles()}\n\n${this.#generateDarkModeComponentRules()}\n\n}\\n`;\n }\n\n #generateUtilitiesLayer() {\n return /*css*/ `@layer utilities {\\n\n${this.#generateIconStyles()}\n\n${this.#generateLayoutUtilities()}\n\n/* Optional utilities/features controlled by config options */\n/* - Body background mesh rule (applies one of the generated mesh vars) */\n/* - Liquid glass utility class */\n${this.#generateBodyBackgroundMeshRule()}\n${this.#generateLiquidGlassUtility()}\n\n${this.#generateBorderGradientUtilities()}\n\n/* Surface utilities */\n\n.surface {\n background-color: var(--color-surface-base);\n --border-gradient-fill: var(--color-surface-base);\n}\n\n.surface-subtle {\n background-color: var(--color-surface-subtle);\n --border-gradient-fill: var(--color-surface-subtle);\n}\n\n.surface-elevated {\n background-color: var(--color-surface-elevated);\n --border-gradient-fill: var(--color-surface-elevated);\n}\n\n.surface-sunken {\n background-color: var(--color-surface-sunken);\n --border-gradient-fill: var(--color-surface-sunken);\n}\n\n.surface-overlay {\n background-color: var(--color-surface-overlay);\n --border-gradient-fill: var(--color-surface-overlay);\n}\n\n/* Translucent semantic variants */\n.surface-translucent {\n background-color: var(--color-surface-translucent-50);\n --border-gradient-fill: var(--color-surface-translucent-50);\n}\n\n.surface-translucent-25 {\n background-color: var(--color-surface-translucent-25);\n --border-gradient-fill: var(--color-surface-translucent-25);\n}\n\n.surface-translucent-50 {\n background-color: var(--color-surface-translucent-50);\n --border-gradient-fill: var(--color-surface-translucent-50);\n}\n\n.surface-translucent-75 {\n background-color: var(--color-surface-translucent-75);\n --border-gradient-fill: var(--color-surface-translucent-75);\n}\n\n/* Legacy utility retained for backwards compatibility (opinionated overlay) */\n.surface-overlay {\n padding: var(--spacing-4);\n background-color: var(--color-surface-overlay);\n box-shadow: var(--shadow-lg);\n border-radius: var(--radius-md);\n}\n\n\n/* \n * SURFACE-INVERSE: Local Theme Context Flip\n * \n * We can't simply add .surface-inverse to the dark mode selector because that would\n * also apply the dark color PALETTE (grays, surfaces, etc.), which would override\n * --color-surface-inverse itself. Instead, we duplicate only the SEMANTIC tokens.\n * \n * Light theme .surface-inverse \u2192 dark semantic tokens\n * Dark theme .surface-inverse \u2192 light semantic tokens (flip back)\n */\n\n/* Surface-inverse visual properties (shared, uses smart surface tokens) */\n.surface-inverse {\n background-color: var(--color-surface-inverse);\n --border-gradient-fill: var(--color-surface-inverse);\n color: var(--surface-inverse-text);\n\n pds-icon {\n color: var(--surface-inverse-icon);\n }\n \n /* btn-primary stays vibrant in any context */\n & .btn-primary {\n background-color: var(--color-primary-fill);\n border-color: var(--color-primary-fill);\n color: var(--color-primary-contrast, #ffffff);\n \n &:hover {\n background-color: var(--color-primary-fill-hover);\n border-color: var(--color-primary-fill-hover);\n }\n }\n}\n\n/* Light-mode inverse: apply dark semantic tokens */\nhtml:not([data-theme=\"dark\"]) .surface-inverse {\n --color-text-primary: var(--color-gray-100);\n --color-text-secondary: var(--color-gray-300);\n --color-text-muted: var(--color-gray-600);\n --color-border: var(--color-gray-700);\n --color-input-bg: var(--color-gray-800);\n --color-input-disabled-bg: var(--color-gray-900);\n --color-input-disabled-text: var(--color-gray-600);\n --color-code-bg: var(--color-gray-800);\n --color-surface-muted: rgba(255, 255, 255, 0.08);\n \n & button:not(.btn-primary):not(.btn-outline):not(.btn-danger),\n & .btn-secondary {\n background-color: rgba(255, 255, 255, 0.12);\n color: var(--surface-inverse-text);\n border-color: rgba(255, 255, 255, 0.25);\n \n &:hover { background-color: rgba(255, 255, 255, 0.2); }\n &:active { background-color: rgba(255, 255, 255, 0.28); }\n }\n \n & select {\n background-color: rgba(255, 255, 255, 0.1);\n color: var(--surface-inverse-text);\n }\n \n & a:not([class*=\"btn\"]) {\n color: var(--color-link);\n }\n}\n\n/* Dark-mode inverse: flip back to light semantic tokens */\nhtml[data-theme=\"dark\"] .surface-inverse {\n --color-text-primary: var(--color-gray-900);\n --color-text-secondary: var(--color-gray-600);\n --color-text-muted: var(--color-gray-600);\n --color-border: var(--color-gray-300);\n --color-input-bg: var(--color-surface-base);\n --color-input-disabled-bg: var(--color-gray-50);\n --color-input-disabled-text: var(--color-gray-500);\n --color-code-bg: var(--color-gray-100);\n --color-surface-muted: var(--color-gray-100);\n \n & button:not(.btn-primary):not(.btn-outline):not(.btn-danger),\n & .btn-secondary {\n background-color: rgba(0, 0, 0, 0.06);\n color: var(--surface-inverse-text);\n border-color: rgba(0, 0, 0, 0.15);\n \n &:hover { background-color: rgba(0, 0, 0, 0.1); }\n &:active { background-color: rgba(0, 0, 0, 0.15); }\n }\n \n & select {\n background-color: #ffffff;\n color: var(--surface-inverse-text);\n }\n \n & a:not([class*=\"btn\"]) {\n color: var(--color-link);\n }\n}\n\n/* Shadow utilities */\n.shadow-sm {\n box-shadow: var(--shadow-sm);\n}\n\n.shadow-base, .shadow {\n box-shadow: var(--shadow-base);\n}\n\n.shadow-md {\n box-shadow: var(--shadow-md);\n}\n\n.shadow-lg {\n box-shadow: var(--shadow-lg);\n}\n\n.shadow-xl {\n box-shadow: var(--shadow-xl);\n}\n\n.shadow-inner {\n box-shadow: var(--shadow-inner);\n}\n\n.shadow-none {\n box-shadow: none;\n}\n\n.text-muted {\n color: var(--color-text-muted);\n}\n\n\n${this.#generateMediaUtilities()}\n\n${this.#generateMediaQueries()}\n\n}\\n`;\n }\n\n /**\n * Create constructable stylesheets for each layer\n */\n #createConstructableStylesheets() {\n this.#stylesheets = {\n tokens: new CSSStyleSheet(),\n primitives: new CSSStyleSheet(),\n components: new CSSStyleSheet(),\n utilities: new CSSStyleSheet(),\n };\n this.#updateConstructableStylesheets();\n }\n\n #updateConstructableStylesheets() {\n this.#stylesheets.tokens.replaceSync(this.#layers.tokens);\n this.#stylesheets.primitives.replaceSync(this.#layers.primitives);\n this.#stylesheets.components.replaceSync(this.#layers.components);\n this.#stylesheets.utilities.replaceSync(this.#layers.utilities);\n }\n\n // /**\n // * Create BLOB URLs for live injection\n // */\n // #createBlobURLs() {\n // this.#blobURLs = {};\n // this.#recreateBlobURLs();\n // }\n\n // #recreateBlobURLs() {\n // // Safety check\n // if (!this.#layers) {\n // this.options.log?.(\n // \"error\",\n // \"[Generator] Cannot create BLOB URLs: layers not generated\"\n // );\n // return;\n // }\n\n // // Revoke old URLs\n // if (this.#blobURLs) {\n // Object.values(this.#blobURLs).forEach((url) => {\n // if (url) URL.revokeObjectURL(url);\n // });\n // }\n\n // // Create new BLOB URLs for each layer\n // this.#blobURLs.tokens = this.#createBlobURL(this.#layers.tokens);\n // this.#blobURLs.primitives = this.#createBlobURL(this.#layers.primitives);\n // this.#blobURLs.components = this.#createBlobURL(this.#layers.components);\n // this.#blobURLs.utilities = this.#createBlobURL(this.#layers.utilities);\n\n // // Combined styles (layers already have @layer wrappers, just concatenate)\n // const combined = `${this.#layers.tokens}\\n${this.#layers.primitives}\\n${\n // this.#layers.components\n // }\\n${this.#layers.utilities}`;\n // this.#blobURLs.styles = this.#createBlobURL(combined);\n\n // if (this.options.debug) {\n // this.options.log?.(\n // \"debug\",\n // \"[Generator] Created BLOB URL for combined styles:\",\n // this.#blobURLs.styles\n // );\n // }\n // }\n\n // #createBlobURL(css) {\n // const blob = new Blob([css], { type: \"text/css\" });\n // return URL.createObjectURL(blob);\n // }\n\n // ========================================================================\n // PUBLIC GETTERS FOR LAYER ACCESS\n // ========================================================================\n\n // CSS strings (raw)\n get tokensCSS() {\n return this.#layers?.tokens || \"\";\n }\n get primitivesCSS() {\n return this.#layers?.primitives || \"\";\n }\n get componentsCSS() {\n return this.#layers?.components || \"\";\n }\n get utilitiesCSS() {\n return this.#layers?.utilities || \"\";\n }\n get layeredCSS() {\n if (!this.#layers) return \"\";\n // Each layer already has @layer wrapper, just concatenate\n return `${this.#layers.tokens}\\n${this.#layers.primitives}\\n${\n this.#layers.components\n }\\n${this.#layers.utilities}`;\n }\n\n /**\n * Get a complete compiled representation of the design system state.\n * This provides structured access to all generated tokens, scales, layers, and metadata.\n * Linked to ontology and enums for introspection and tooling.\n *\n * @returns {Object} Compiled design system state with tokens, layers, metadata, and references\n */\n get compiled() {\n return {\n // Core token groups - the source data used to generate CSS\n tokens: {\n colors: this.tokens.colors,\n spacing: this.tokens.spacing,\n radius: this.tokens.radius,\n borderWidths: this.tokens.borderWidths,\n typography: this.tokens.typography,\n shadows: this.tokens.shadows,\n layout: this.tokens.layout,\n transitions: this.tokens.transitions,\n zIndex: this.tokens.zIndex,\n icons: this.tokens.icons,\n },\n\n // Layer information - CSS content and metadata\n layers: {\n tokens: {\n css: this.#layers?.tokens || \"\",\n size: this.#layers?.tokens?.length || 0,\n sizeKB: ((this.#layers?.tokens?.length || 0) / 1024).toFixed(2),\n },\n primitives: {\n css: this.#layers?.primitives || \"\",\n size: this.#layers?.primitives?.length || 0,\n sizeKB: ((this.#layers?.primitives?.length || 0) / 1024).toFixed(2),\n },\n components: {\n css: this.#layers?.components || \"\",\n size: this.#layers?.components?.length || 0,\n sizeKB: ((this.#layers?.components?.length || 0) / 1024).toFixed(2),\n },\n utilities: {\n css: this.#layers?.utilities || \"\",\n size: this.#layers?.utilities?.length || 0,\n sizeKB: ((this.#layers?.utilities?.length || 0) / 1024).toFixed(2),\n },\n combined: {\n css: this.layeredCSS,\n size: this.layeredCSS?.length || 0,\n sizeKB: ((this.layeredCSS?.length || 0) / 1024).toFixed(2),\n },\n },\n\n // Configuration snapshot - what was used to generate this state\n config: {\n design: this.options.design || {},\n preset: this.options.preset || null,\n debug: this.options.debug || false,\n },\n\n // Runtime capabilities and environment\n capabilities: {\n constructableStylesheets: typeof CSSStyleSheet !== \"undefined\",\n blobURLs: typeof Blob !== \"undefined\" && typeof URL !== \"undefined\",\n shadowDOM: typeof ShadowRoot !== \"undefined\",\n },\n\n // References to design system metadata\n references: {\n // Link to ontology for component/primitive definitions\n ontology: typeof ontology !== \"undefined\" ? ontology : null,\n // Link to enums for valid values\n enums: typeof enums !== \"undefined\" ? enums : null,\n },\n\n // Computed metadata about the generated design system\n meta: {\n generatedAt: new Date().toISOString(),\n totalSize:\n (this.#layers?.tokens?.length || 0) +\n (this.#layers?.primitives?.length || 0) +\n (this.#layers?.components?.length || 0) +\n (this.#layers?.utilities?.length || 0),\n totalSizeKB: (\n ((this.#layers?.tokens?.length || 0) +\n (this.#layers?.primitives?.length || 0) +\n (this.#layers?.components?.length || 0) +\n (this.#layers?.utilities?.length || 0)) /\n 1024\n ).toFixed(2),\n layerCount: 4,\n tokenGroups: Object.keys(this.tokens).length,\n },\n\n // Introspection helpers - methods to query the compiled state\n helpers: {\n /**\n * Get all color scales as a flat array\n */\n getColorScales: () => {\n const scales = [];\n const colors = this.tokens.colors;\n for (const [name, scale] of Object.entries(colors)) {\n if (typeof scale === \"object\" && scale !== null) {\n scales.push({ name, scale });\n }\n }\n return scales;\n },\n\n /**\n * Get a specific color scale by name\n */\n getColorScale: (name) => {\n return this.tokens.colors[name] || null;\n },\n\n /**\n * Get all spacing values as an array\n */\n getSpacingValues: () => {\n return Object.entries(this.tokens.spacing).map(([key, value]) => ({\n key,\n value,\n }));\n },\n\n /**\n * Get typography configuration\n */\n getTypography: () => {\n return this.tokens.typography;\n },\n\n /**\n * Get the CSS for a specific layer\n */\n getLayerCSS: (layer) => {\n const validLayers = [\n \"tokens\",\n \"primitives\",\n \"components\",\n \"utilities\",\n ];\n if (!validLayers.includes(layer)) {\n throw new Error(\n `Invalid layer: ${layer}. Must be one of ${validLayers.join(\n \", \",\n )}`,\n );\n }\n return this.#layers?.[layer] || \"\";\n },\n\n /**\n * Check if a specific enum value is used in the current configuration\n */\n usesEnumValue: (enumGroup, value) => {\n const config = this.options.design || {};\n // Simple check - can be expanded for more sophisticated detection\n const configStr = JSON.stringify(config);\n return configStr.includes(value);\n },\n },\n };\n }\n\n // Constructable stylesheets (browser only)\n get tokensStylesheet() {\n return this.#stylesheets?.tokens;\n }\n get primitivesStylesheet() {\n return this.#stylesheets?.primitives;\n }\n get componentsStylesheet() {\n return this.#stylesheets?.components;\n }\n get utilitiesStylesheet() {\n return this.#stylesheets?.utilities;\n }\n\n // // BLOB URLs (browser only)\n // get tokensBlobURL() {\n // return this.#blobURLs?.tokens;\n // }\n // get primitivesBlobURL() {\n // return this.#blobURLs?.primitives;\n // }\n // get componentsBlobURL() {\n // return this.#blobURLs?.components;\n // }\n // get utilitiesBlobURL() {\n // return this.#blobURLs?.utilities;\n // }\n // get stylesBlobURL() {\n // return this.#blobURLs?.styles;\n // }\n\n /**\n * Generate CSS module files for export\n * Returns object with filename => content\n */\n getCSSModules() {\n return {\n \"pds-tokens.css.js\": this.#generateCSSModule(\n \"tokens\",\n this.#layers.tokens,\n ),\n \"pds-primitives.css.js\": this.#generateCSSModule(\n \"primitives\",\n this.#layers.primitives,\n ),\n \"pds-components.css.js\": this.#generateCSSModule(\n \"components\",\n this.#layers.components,\n ),\n \"pds-utilities.css.js\": this.#generateCSSModule(\n \"utilities\",\n this.#layers.utilities,\n ),\n \"pds-styles.css.js\": this.#generateCSSModule(\"styles\", this.layeredCSS),\n };\n }\n\n #generateCSSModule(name, css) {\n // Escape backticks and backslashes in CSS\n const escapedCSS = css\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/`/g, \"\\\\`\")\n .replace(/\\$/g, \"\\\\$\");\n\n return `// Pure Design System - ${name}\n// Auto-generated - do not edit directly\n\nexport const ${name} = new CSSStyleSheet();\n${name}.replaceSync(\\`${escapedCSS}\\`);\n\nexport const ${name}CSS = \\`${escapedCSS}\\`;\n`;\n }\n}\n\n/**\n * Validate a design configuration for accessibility sanity checks.\n * Currently validates color contrast for primary buttons and base surface text\n * in both light and dark themes.\n *\n * @param {object} designConfig - A full or partial PDS config object\n * @param {object} [options]\n * @param {number} [options.minContrast=4.5] - Minimum contrast ratio for normal text\n * @param {boolean} [options.warnOnHueDrift=true] - Emit non-blocking brand-identity hue drift warnings for darkMode overrides.\n * @param {number} [options.maxHueDrift=35] - Maximum recommended hue delta (degrees) before warning.\n * @returns {{ ok: boolean, issues: Array<{path:string, message:string, ratio:number, min:number, context?:string}>, warnings: Array<{path:string, message:string, context?:string}> }}\n */\nexport function validateDesign(designConfig = {}, options = {}) {\n const MIN = Number(options.minContrast || 4.5);\n const MIN_MUTED = Number(options.minMutedContrast || 3.0);\n const EXTENDED = Boolean(options.extendedChecks);\n const ENABLE_HUE_DRIFT_WARNINGS = options.warnOnHueDrift !== false;\n const MAX_HUE_DRIFT = Number.isFinite(Number(options.maxHueDrift))\n ? Number(options.maxHueDrift)\n : 35;\n const MIN_SAT_FOR_HUE_WARNING = Number.isFinite(\n Number(options.minSaturationForHueWarning),\n )\n ? Number(options.minSaturationForHueWarning)\n : 18;\n\n // Local helpers (keep public; no dependency on private Generator methods)\n const normalizeHex = (hex) => {\n const raw = String(hex || \"\").trim();\n const m = raw.match(/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);\n if (!m) return null;\n const body = m[1];\n const full =\n body.length === 3\n ? body\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : body;\n return `#${full.toLowerCase()}`;\n };\n const hexToRgb = (hex) => {\n const normalized = normalizeHex(hex);\n if (!normalized) return null;\n const h = normalized.replace(\"#\", \"\");\n const full =\n h.length === 3\n ? h\n .split(\"\")\n .map((c) => c + c)\n .join(\"\")\n : h;\n const num = parseInt(full || \"0\", 16);\n return { r: (num >> 16) & 255, g: (num >> 8) & 255, b: num & 255 };\n };\n const luminance = (hex) => {\n const rgb = hexToRgb(hex);\n if (!rgb) return 0;\n const { r, g, b } = rgb;\n const srgb = [r / 255, g / 255, b / 255].map((v) =>\n v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4),\n );\n return 0.2126 * srgb[0] + 0.7152 * srgb[1] + 0.0722 * srgb[2];\n };\n const contrast = (a, b) => {\n if (!a || !b) return 0;\n const L1 = luminance(a);\n const L2 = luminance(b);\n const lighter = Math.max(L1, L2);\n const darker = Math.min(L1, L2);\n return (lighter + 0.05) / (darker + 0.05);\n };\n const hexToHsl = (hex) => {\n const rgb = hexToRgb(hex);\n if (!rgb) return null;\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n let h = 0;\n if (delta !== 0) {\n if (max === r) h = ((g - b) / delta) % 6;\n else if (max === g) h = (b - r) / delta + 2;\n else h = (r - g) / delta + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n\n const l = (max + min) / 2;\n const s =\n delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n\n return { h, s: s * 100, l: l * 100 };\n };\n const hueDelta = (h1, h2) => {\n if (!Number.isFinite(h1) || !Number.isFinite(h2)) return null;\n const diff = Math.abs(h1 - h2);\n return Math.min(diff, 360 - diff);\n };\n\n const issues = [];\n const warnings = [];\n try {\n // Build tokens from the candidate config\n const gen = new Generator({ design: structuredClone(designConfig) });\n const c = gen.tokens.colors;\n\n // Light theme checks - use computed interactive tokens\n const light = {\n surfaceBg: c.surface?.base,\n surfaceText: c.gray?.[900] || \"#000000\",\n surfaceTextSecondary: c.gray?.[700] || c.gray?.[800] || c.gray?.[900],\n surfaceTextMuted: c.gray?.[500] || c.gray?.[600] || c.gray?.[700],\n surfaceElevated: c.surface?.elevated || c.surface?.base,\n primaryFill: c.interactive?.light?.fill || c.primary?.[600],\n primaryText: c.interactive?.light?.text || c.primary?.[600],\n accentFill: c.accent?.[600] || c.accent?.[500],\n successFill: c.success?.[600] || c.success?.[500],\n warningFill: c.warning?.[600] || c.warning?.[500],\n dangerFill: c.danger?.[600] || c.danger?.[500],\n infoFill: c.info?.[600] || c.info?.[500],\n };\n\n const bestTextContrast = (bg) => Math.max(contrast(bg, \"#ffffff\"), contrast(bg, \"#000000\"));\n\n // Primary button (light): check button fill with white text\n const lightBtnRatio = contrast(light.primaryFill, \"#ffffff\");\n if (lightBtnRatio < MIN) {\n issues.push({\n path: \"/colors/primary\",\n message: `Primary button contrast too low in light theme (${lightBtnRatio.toFixed(\n 2,\n )} < ${MIN}). Choose a darker primary.`,\n ratio: lightBtnRatio,\n min: MIN,\n context: \"light/btn-primary\",\n });\n }\n\n // Surface text (light): text vs surface base\n const lightTextRatio = contrast(light.surfaceBg, light.surfaceText);\n if (lightTextRatio < MIN) {\n issues.push({\n path: \"/colors/background\",\n message: `Base text contrast on surface (light) is too low (${lightTextRatio.toFixed(\n 2,\n )} < ${MIN}). Adjust background or secondary (gray).`,\n ratio: lightTextRatio,\n min: MIN,\n context: \"light/surface-text\",\n });\n }\n\n if (EXTENDED) {\n // Secondary body text (light)\n const lightSecondaryRatio = contrast(light.surfaceBg, light.surfaceTextSecondary);\n if (lightSecondaryRatio < MIN) {\n issues.push({\n path: \"/colors/secondary\",\n message: `Secondary text contrast on base surface (light) is too low (${lightSecondaryRatio.toFixed(\n 2,\n )} < ${MIN}).`,\n ratio: lightSecondaryRatio,\n min: MIN,\n context: \"light/surface-text-secondary\",\n });\n }\n\n // Muted text should still be readable for helper text\n const lightMutedRatio = contrast(light.surfaceBg, light.surfaceTextMuted);\n if (lightMutedRatio < MIN_MUTED) {\n issues.push({\n path: \"/colors/secondary\",\n message: `Muted text contrast on base surface (light) is too low (${lightMutedRatio.toFixed(\n 2,\n )} < ${MIN_MUTED}).`,\n ratio: lightMutedRatio,\n min: MIN_MUTED,\n context: \"light/surface-text-muted\",\n });\n }\n\n // Elevated cards often dominate page UI; enforce readable default text\n const elevatedTextRatio = contrast(light.surfaceElevated, light.surfaceText);\n if (elevatedTextRatio < MIN) {\n issues.push({\n path: \"/colors/background\",\n message: `Elevated surface text contrast (light) is too low (${elevatedTextRatio.toFixed(\n 2,\n )} < ${MIN}).`,\n ratio: elevatedTextRatio,\n min: MIN,\n context: \"light/surface-elevated-text\",\n });\n }\n }\n\n // Primary text for outline/link: check link text on surface\n const lightOutlineRatio = contrast(light.primaryText, light.surfaceBg);\n if (lightOutlineRatio < MIN) {\n issues.push({\n path: \"/colors/primary\",\n message: `Primary text on surface is too low for outline/link styles (light) (${lightOutlineRatio.toFixed(\n 2,\n )} < ${MIN}). Choose a darker primary or lighter surface.`,\n ratio: lightOutlineRatio,\n min: MIN,\n context: \"light/outline\",\n });\n }\n\n if (EXTENDED) {\n // Semantic/accent fills must support readable foreground (white or black)\n const semanticFills = [\n { path: \"/colors/accent\", key: \"accent\", value: light.accentFill },\n { path: \"/colors/success\", key: \"success\", value: light.successFill },\n { path: \"/colors/warning\", key: \"warning\", value: light.warningFill },\n { path: \"/colors/danger\", key: \"danger\", value: light.dangerFill },\n { path: \"/colors/info\", key: \"info\", value: light.infoFill },\n ];\n semanticFills.forEach((entry) => {\n if (!entry?.value) return;\n const ratio = bestTextContrast(entry.value);\n if (ratio < MIN) {\n issues.push({\n path: entry.path,\n message: `${entry.key} fill color cannot achieve accessible text contrast (${ratio.toFixed(\n 2,\n )} < ${MIN}) with either white or black text.`,\n ratio,\n min: MIN,\n context: `light/${entry.key}-fill`,\n });\n }\n });\n }\n\n // Dark theme checks - use computed interactive tokens\n const d = c.dark;\n if (d) {\n const dark = {\n surfaceBg: d.surface?.base || c.surface?.inverse,\n surfaceText: d.gray?.[50] || d.gray?.[100] || \"#ffffff\",\n surfaceTextMuted: d.gray?.[300] || d.gray?.[400] || d.gray?.[500],\n primaryFill: c.interactive?.dark?.fill || d.primary?.[600],\n primaryText: c.interactive?.dark?.text || d.primary?.[600],\n };\n\n // Primary button (dark): check button fill with white text\n const darkBtnRatio = contrast(dark.primaryFill, \"#ffffff\");\n if (darkBtnRatio < MIN) {\n issues.push({\n path: \"/colors/darkMode/primary\",\n message: `Primary button contrast too low in dark theme (${darkBtnRatio.toFixed(\n 2,\n )} < ${MIN}). Override darkMode.primary or pick a brighter hue.`,\n ratio: darkBtnRatio,\n min: MIN,\n context: \"dark/btn-primary\",\n });\n }\n\n // Outline/link style in dark: check link text on dark surface\n const darkOutlineRatio = contrast(dark.primaryText, dark.surfaceBg);\n if (darkOutlineRatio < MIN) {\n issues.push({\n path: \"/colors/darkMode/primary\",\n message: `Primary text on surface is too low for outline/link styles (dark) (${darkOutlineRatio.toFixed(\n 2,\n )} < ${MIN}). Override darkMode.primary/background.`,\n ratio: darkOutlineRatio,\n min: MIN,\n context: \"dark/outline\",\n });\n }\n\n if (EXTENDED) {\n const darkTextRatio = contrast(dark.surfaceBg, dark.surfaceText);\n if (darkTextRatio < MIN) {\n issues.push({\n path: \"/colors/darkMode/background\",\n message: `Base text contrast on surface (dark) is too low (${darkTextRatio.toFixed(\n 2,\n )} < ${MIN}).`,\n ratio: darkTextRatio,\n min: MIN,\n context: \"dark/surface-text\",\n });\n }\n\n const darkMutedRatio = contrast(dark.surfaceBg, dark.surfaceTextMuted);\n if (darkMutedRatio < MIN_MUTED) {\n issues.push({\n path: \"/colors/darkMode/secondary\",\n message: `Muted text contrast on surface (dark) is too low (${darkMutedRatio.toFixed(\n 2,\n )} < ${MIN_MUTED}).`,\n ratio: darkMutedRatio,\n min: MIN_MUTED,\n context: \"dark/surface-text-muted\",\n });\n }\n }\n }\n\n if (ENABLE_HUE_DRIFT_WARNINGS) {\n const configured = designConfig?.colors || {};\n const configuredDark = configured?.darkMode || {};\n const families = [\"primary\", \"secondary\", \"accent\"];\n\n families.forEach((family) => {\n const lightBase = configured?.[family];\n const darkOverride = configuredDark?.[family];\n if (!lightBase || !darkOverride) return;\n\n const lightHsl = hexToHsl(lightBase);\n const darkHsl = hexToHsl(darkOverride);\n if (!lightHsl || !darkHsl) return;\n\n // For near-neutrals hue isn't meaningful enough to warn.\n if (\n lightHsl.s < MIN_SAT_FOR_HUE_WARNING &&\n darkHsl.s < MIN_SAT_FOR_HUE_WARNING\n ) {\n return;\n }\n\n const drift = hueDelta(lightHsl.h, darkHsl.h);\n if (drift == null || drift <= MAX_HUE_DRIFT) return;\n\n warnings.push({\n path: `/colors/darkMode/${family}`,\n message: `Dark mode ${family} hue drifts ${drift.toFixed(\n 1,\n )}deg from light ${family} (${lightHsl.h.toFixed(\n 1,\n )}deg -> ${darkHsl.h.toFixed(\n 1,\n )}deg). This may reduce cross-theme brand identity consistency.`,\n context: `dark/identity-hue-${family}`,\n });\n });\n }\n } catch (err) {\n issues.push({\n path: \"/\",\n message: `Validation failed: ${String(err?.message || err)}`,\n ratio: 0,\n min: 0,\n });\n }\n\n return { ok: issues.length === 0, issues, warnings };\n}\n\n/**\n * Validate multiple design configurations at once.\n * Useful for build-time enforcement of preset compliance.\n *\n * @param {Array<object>} designs - Array of design configs; items may include an optional `name` property.\n * @param {object} [options] - Options forwarded to validateDesign (e.g., { minContrast })\n * @returns {{ ok: boolean, results: Array<{ name?: string, ok: boolean, issues: Array<{path:string, message:string, ratio:number, min:number, context?:string}>, warnings?: Array<{path:string, message:string, context?:string}> }> }}\n */\nexport function validateDesigns(designs = [], options = {}) {\n const results = [];\n\n const list = Array.isArray(designs)\n ? designs\n : designs && typeof designs === \"object\"\n ? Object.values(designs)\n : [];\n\n for (const item of list) {\n let name;\n let configToValidate = null;\n\n // Accept a few shapes:\n // - string => treat as preset id/name\n // - { preset, design?, name? } => resolve preset then merge overrides\n // - full config object (legacy) => validate directly\n if (typeof item === \"string\") {\n const id = String(item).toLowerCase();\n const found =\n presets?.[id] ||\n Object.values(presets || {}).find(\n (p) =>\n __slugify(p.name) === id ||\n String(p.name || \"\").toLowerCase() === id,\n );\n if (!found) {\n results.push({\n name: item,\n ok: false,\n issues: [\n {\n path: \"/\",\n message: `Preset not found: ${item}`,\n ratio: 0,\n min: 0,\n },\n ],\n });\n continue;\n }\n name = found.name || id;\n configToValidate = structuredClone(found);\n } else if (item && typeof item === \"object\") {\n name = item.name || item.preset || undefined;\n if (\"preset\" in item || \"design\" in item) {\n const effectivePreset = String(item.preset || \"default\").toLowerCase();\n const found =\n presets?.[effectivePreset] ||\n Object.values(presets || {}).find(\n (p) =>\n __slugify(p.name) === effectivePreset ||\n String(p.name || \"\").toLowerCase() === effectivePreset,\n );\n if (!found) {\n results.push({\n name,\n ok: false,\n issues: [\n {\n path: \"/\",\n message: `Preset not found: ${item.preset}`,\n ratio: 0,\n min: 0,\n },\n ],\n });\n continue;\n }\n let base = structuredClone(found);\n if (item.design && typeof item.design === \"object\") {\n base = __deepMerge(base, structuredClone(item.design));\n }\n configToValidate = base;\n } else {\n // Assume a full config object\n configToValidate = item;\n }\n }\n\n if (!configToValidate) {\n results.push({\n name,\n ok: false,\n issues: [\n { path: \"/\", message: \"Invalid design entry\", ratio: 0, min: 0 },\n ],\n });\n continue;\n }\n\n const { ok, issues } = validateDesign(configToValidate, options);\n results.push({ name, ok, issues });\n }\n\n return { ok: results.every((r) => r.ok), results };\n}\n\n// Internal: deep merge utility (arrays replace; objects merge)\nfunction __deepMerge(target = {}, source = {}) {\n if (!source || typeof source !== \"object\") return target;\n const out = Array.isArray(target) ? [...target] : { ...target };\n for (const [key, value] of Object.entries(source)) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n out[key] = __deepMerge(\n out[key] && typeof out[key] === \"object\" ? out[key] : {},\n value,\n );\n } else {\n out[key] = value;\n }\n }\n return out;\n}\n\n// Internal: create a slug for matching names like \"Paper & Ink\" -> \"paper-and-ink\"\nfunction __slugify(str = \"\") {\n return String(str)\n .toLowerCase()\n .replace(/&/g, \" and \")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nimport { enums } from \"./pds-enums.js\";\nimport { ontology } from \"./pds-ontology.js\";\n", "const __SUPPORTED_LOG_LEVELS = new Set([\"log\", \"warn\", \"error\", \"debug\", \"info\"]);\r\nconst __PDS_SINGLETON_KEY = \"__PURE_DS_PDS_SINGLETON__\";\r\n\r\nlet __logProvider = null;\r\nlet __contextProvider = null;\r\n\r\nfunction __resolveGlobalPDS() {\r\n try {\r\n const scope = typeof globalThis !== \"undefined\" ? globalThis : window;\r\n const candidate = scope?.[__PDS_SINGLETON_KEY];\r\n if (candidate && typeof candidate === \"object\") {\r\n return candidate;\r\n }\r\n } catch (error) {\r\n return null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction __normalizeContext(context) {\r\n if (!context || typeof context !== \"object\") {\r\n return null;\r\n }\r\n return {\r\n mode: context.mode === \"live\" || context.mode === \"static\" ? context.mode : null,\r\n debug: context.debug === true,\r\n thisArg: context.thisArg,\r\n };\r\n}\r\n\r\nfunction __normalizeLevel(level) {\r\n if (typeof level !== \"string\") return \"log\";\r\n const normalized = level.toLowerCase();\r\n return __SUPPORTED_LOG_LEVELS.has(normalized) ? normalized : \"log\";\r\n}\r\n\r\nfunction __resolveContext() {\r\n if (typeof __contextProvider === \"function\") {\r\n try {\r\n const configuredContext = __normalizeContext(__contextProvider());\r\n if (configuredContext) {\r\n return configuredContext;\r\n }\r\n } catch (error) {}\r\n }\r\n\r\n const globalPDS = __resolveGlobalPDS();\r\n if (globalPDS) {\r\n const mode =\r\n globalPDS?.mode ||\r\n globalPDS?.compiled?.mode ||\r\n (globalPDS?.registry?.isLive ? \"live\" : \"static\");\r\n const debug =\r\n (globalPDS?.debug ||\r\n globalPDS?.currentConfig?.debug ||\r\n globalPDS?.currentConfig?.design?.debug ||\r\n globalPDS?.compiled?.debug ||\r\n globalPDS?.compiled?.design?.debug ||\r\n false) === true;\r\n return {\r\n mode,\r\n debug,\r\n thisArg: globalPDS,\r\n };\r\n }\r\n\r\n return { mode: null, debug: false };\r\n}\r\n\r\nfunction __resolveLogger() {\r\n if (typeof __logProvider === \"function\") {\r\n try {\r\n const logger = __logProvider();\r\n if (typeof logger === \"function\") {\r\n return logger;\r\n }\r\n } catch (error) {}\r\n }\r\n\r\n const globalPDS = __resolveGlobalPDS();\r\n if (typeof globalPDS?.logHandler === \"function\") {\r\n return globalPDS.logHandler;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction __consoleLog(level, message, ...data) {\r\n if (typeof console === \"undefined\") return;\r\n const method =\r\n typeof console[level] === \"function\"\r\n ? console[level].bind(console)\r\n : typeof console.log === \"function\"\r\n ? console.log.bind(console)\r\n : null;\r\n if (!method) return;\r\n\r\n if (data.length > 0) {\r\n method(message, ...data);\r\n } else {\r\n method(message);\r\n }\r\n}\r\n\r\nfunction __shouldUseConsoleFallback(level, context) {\r\n const debugEnabled = context?.debug === true;\r\n const staticMode = context?.mode === \"static\";\r\n\r\n if (staticMode && !debugEnabled) {\r\n return false;\r\n }\r\n\r\n if (!debugEnabled && level !== \"error\" && level !== \"warn\") {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function configurePDSLogger({ getLogger, getContext } = {}) {\r\n __logProvider = typeof getLogger === \"function\" ? getLogger : null;\r\n __contextProvider = typeof getContext === \"function\" ? getContext : null;\r\n}\r\n\r\nexport function pdsLog(level = \"log\", message, ...data) {\r\n const normalizedLevel = __normalizeLevel(level);\r\n const context = __resolveContext();\r\n const customLogger = __resolveLogger();\r\n\r\n if (customLogger) {\r\n try {\r\n customLogger.call(context?.thisArg, normalizedLevel, message, ...data);\r\n return;\r\n } catch (error) {\r\n __consoleLog(\"error\", \"Custom log handler failed:\", error);\r\n }\r\n }\r\n\r\n if (!__shouldUseConsoleFallback(normalizedLevel, context)) {\r\n return;\r\n }\r\n\r\n __consoleLog(normalizedLevel, message, ...data);\r\n}\r\n", "import { pdsLog } from \"./pds-log.js\";\r\n\r\nconst __DEFAULT_LOCALE__ = \"en\";\r\n\r\nconst __localizationState = {\r\n defaultLocale: __DEFAULT_LOCALE__,\r\n provider: null,\r\n messagesByLocale: new Map(),\r\n loadingByLocale: new Map(),\r\n observer: null,\r\n reconcileTimer: null,\r\n requestedKeys: new Set(),\r\n textNodeKeyMap: new WeakMap(),\r\n attributeKeyMap: new WeakMap(),\r\n valueToKeys: new Map(),\r\n missingWarnings: new Set(),\r\n};\r\n\r\nconst __LOCALIZABLE_ATTRIBUTES = [\r\n \"title\",\r\n \"placeholder\",\r\n \"aria-label\",\r\n \"aria-description\",\r\n \"aria-placeholder\",\r\n \"aria-roledescription\",\r\n \"alt\",\r\n \"label\",\r\n];\r\n\r\nconst __isStrTagged = (val) =>\r\n Boolean(val) && typeof val !== \"string\" && typeof val === \"object\" && \"strTag\" in val;\r\n\r\nfunction __normalizeLocale(locale) {\r\n return String(locale || \"\").trim().toLowerCase();\r\n}\r\n\r\nfunction __toBaseLocale(locale) {\r\n const normalized = __normalizeLocale(locale);\r\n if (!normalized) return \"\";\r\n return normalized.split(\"-\")[0] || normalized;\r\n}\r\n\r\nfunction __resolveLocaleCandidate(locale) {\r\n const normalized = __normalizeLocale(locale);\r\n if (!normalized) {\r\n return __localizationState.defaultLocale;\r\n }\r\n\r\n const resolveLocale = __localizationState.provider?.resolveLocale;\r\n if (typeof resolveLocale === \"function\") {\r\n const resolved = __normalizeLocale(resolveLocale(locale));\r\n if (resolved) {\r\n return resolved;\r\n }\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction __collateStrings(strings) {\r\n let result = \"\";\r\n for (let index = 0; index <= strings.length - 1; index += 1) {\r\n result += strings[index];\r\n if (index < strings.length - 1) {\r\n result += `{${index}}`;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction __replacePlaceholders(input, callback) {\r\n return String(input).replace(/\\{(\\d+)\\}/g, (_match, index) => callback(Number(index)));\r\n}\r\n\r\nfunction __normalizeMessages(messages) {\r\n if (!messages || typeof messages !== \"object\") {\r\n return {};\r\n }\r\n\r\n const normalized = {};\r\n for (const [key, value] of Object.entries(messages)) {\r\n if (typeof value === \"string\") {\r\n normalized[key] = value;\r\n continue;\r\n }\r\n\r\n if (value && typeof value === \"object\" && typeof value.content === \"string\") {\r\n normalized[key] = value.content;\r\n }\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction __resolveProvider(config) {\r\n const provider =\r\n config && typeof config.provider === \"object\" && config.provider\r\n ? config.provider\r\n : null;\r\n\r\n const translate =\r\n typeof config?.translate === \"function\"\r\n ? config.translate\r\n : typeof provider?.translate === \"function\"\r\n ? provider.translate\r\n : null;\r\n\r\n const loadLocale =\r\n typeof config?.loadLocale === \"function\"\r\n ? config.loadLocale\r\n : typeof provider?.loadLocale === \"function\"\r\n ? provider.loadLocale\r\n : null;\r\n\r\n const setLocale =\r\n typeof config?.setLocale === \"function\"\r\n ? config.setLocale\r\n : typeof provider?.setLocale === \"function\"\r\n ? provider.setLocale\r\n : null;\r\n\r\n const resolveLocale =\r\n typeof config?.resolveLocale === \"function\"\r\n ? config.resolveLocale\r\n : typeof provider?.resolveLocale === \"function\"\r\n ? provider.resolveLocale\r\n : null;\r\n\r\n if (!translate && !loadLocale && !setLocale && !resolveLocale) {\r\n return null;\r\n }\r\n\r\n return {\r\n translate,\r\n loadLocale,\r\n setLocale,\r\n resolveLocale,\r\n };\r\n}\r\n\r\nfunction __localeVariants(locale) {\r\n const normalized = __normalizeLocale(locale);\r\n if (!normalized) {\r\n return [__localizationState.defaultLocale];\r\n }\r\n const base = __toBaseLocale(normalized);\r\n if (!base || base === normalized) {\r\n return [normalized];\r\n }\r\n return [normalized, base];\r\n}\r\n\r\nfunction __setLocaleMessages(locale, messages) {\r\n const normalizedLocale = __resolveLocaleCandidate(locale);\r\n __localizationState.messagesByLocale.set(\r\n normalizedLocale,\r\n __normalizeMessages(messages)\r\n );\r\n}\r\n\r\nfunction __registerRequestedKey(key) {\r\n if (typeof key === \"string\" && key.length > 0) {\r\n __localizationState.requestedKeys.add(key);\r\n }\r\n}\r\n\r\nfunction __indexTranslatedValue(key, value) {\r\n if (typeof key !== \"string\" || !key.length) {\r\n return;\r\n }\r\n\r\n const translatedValue = typeof value === \"string\" ? value : String(value || \"\");\r\n if (!translatedValue.length) {\r\n return;\r\n }\r\n\r\n if (!__localizationState.valueToKeys.has(translatedValue)) {\r\n __localizationState.valueToKeys.set(translatedValue, new Set());\r\n }\r\n\r\n __localizationState.valueToKeys.get(translatedValue).add(key);\r\n}\r\n\r\nfunction __getLocaleMessages(locale) {\r\n const variants = __localeVariants(locale);\r\n for (const candidate of variants) {\r\n if (__localizationState.messagesByLocale.has(candidate)) {\r\n return {\r\n locale: candidate,\r\n messages: __localizationState.messagesByLocale.get(candidate),\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nasync function __loadLocaleInternal(locale, reason = \"explicit\") {\r\n const targetLocale = __resolveLocaleCandidate(locale);\r\n const existing = __getLocaleMessages(targetLocale);\r\n if (existing) {\r\n return existing.messages;\r\n }\r\n\r\n const loadingKey = targetLocale;\r\n if (__localizationState.loadingByLocale.has(loadingKey)) {\r\n return __localizationState.loadingByLocale.get(loadingKey);\r\n }\r\n\r\n if (!__localizationState.provider) {\r\n return {};\r\n }\r\n\r\n const loader =\r\n __localizationState.provider.loadLocale ||\r\n __localizationState.provider.setLocale ||\r\n null;\r\n\r\n if (typeof loader !== \"function\") {\r\n return {};\r\n }\r\n\r\n const context = {\r\n locale: targetLocale,\r\n defaultLocale: __localizationState.defaultLocale,\r\n reason,\r\n loadedLocales: Array.from(__localizationState.messagesByLocale.keys()),\r\n messages: {\r\n ...(__getLocaleMessages(targetLocale)?.messages || {}),\r\n },\r\n load: reason === \"set-default\" || reason === \"explicit-load\",\r\n };\r\n\r\n let result;\r\n try {\r\n result = loader(context);\r\n } catch {\r\n return {};\r\n }\r\n\r\n if (result && typeof result.then === \"function\") {\r\n const promise = result\r\n .then((value) => {\r\n const normalized = __normalizeMessages(value);\r\n __setLocaleMessages(targetLocale, normalized);\r\n return normalized;\r\n })\r\n .catch(() => ({}))\r\n .finally(() => {\r\n __localizationState.loadingByLocale.delete(loadingKey);\r\n });\r\n\r\n __localizationState.loadingByLocale.set(loadingKey, promise);\r\n return promise;\r\n }\r\n\r\n const normalized = __normalizeMessages(result);\r\n __setLocaleMessages(targetLocale, normalized);\r\n return normalized;\r\n}\r\n\r\nfunction __resolveLocaleFromElementScope(element) {\r\n if (!element || typeof element !== \"object\") {\r\n return \"\";\r\n }\r\n\r\n const canUseElementCtor = typeof Element !== \"undefined\";\r\n const el =\r\n canUseElementCtor && element instanceof Element\r\n ? element\r\n : element?.nodeType === 1\r\n ? element\r\n : null;\r\n\r\n if (!el) {\r\n return \"\";\r\n }\r\n\r\n if (el.hasAttribute?.(\"lang\")) {\r\n return __normalizeLocale(el.getAttribute(\"lang\"));\r\n }\r\n\r\n const scoped = el.closest?.(\"[lang]\");\r\n if (scoped && scoped.getAttribute) {\r\n return __normalizeLocale(scoped.getAttribute(\"lang\"));\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nfunction __resolveContextLocale(options = {}) {\r\n if (typeof options?.lang === \"string\" && options.lang.trim()) {\r\n return __resolveLocaleCandidate(options.lang);\r\n }\r\n\r\n const scopeElement =\r\n options?.element || options?.scope || options?.host || options?.contextElement || null;\r\n const scopedLocale = __resolveLocaleFromElementScope(scopeElement);\r\n if (scopedLocale) {\r\n return __resolveLocaleCandidate(scopedLocale);\r\n }\r\n\r\n if (typeof document !== \"undefined\" && document.documentElement) {\r\n const rootLocale = __normalizeLocale(document.documentElement.getAttribute(\"lang\"));\r\n if (rootLocale) {\r\n return __resolveLocaleCandidate(rootLocale);\r\n }\r\n }\r\n\r\n return __localizationState.defaultLocale;\r\n}\r\n\r\nfunction __collectDetectedLocales() {\r\n const detected = new Set([__localizationState.defaultLocale]);\r\n\r\n if (typeof document === \"undefined\") {\r\n return detected;\r\n }\r\n\r\n const rootLang = __normalizeLocale(document.documentElement?.getAttribute?.(\"lang\"));\r\n if (rootLang) {\r\n detected.add(__resolveLocaleCandidate(rootLang));\r\n }\r\n\r\n const nodes = document.querySelectorAll?.(\"[lang]\") || [];\r\n for (const node of nodes) {\r\n const lang = __normalizeLocale(node.getAttribute(\"lang\"));\r\n if (lang) {\r\n detected.add(__resolveLocaleCandidate(lang));\r\n }\r\n }\r\n\r\n return detected;\r\n}\r\n\r\nasync function __ensureDetectedLocalesLoaded(detectedLocales) {\r\n for (const locale of detectedLocales) {\r\n await __loadLocaleInternal(locale, \"lang-detected\");\r\n }\r\n}\r\n\r\nfunction __pruneUndetectedLocales(detectedLocales) {\r\n for (const loadedLocale of Array.from(__localizationState.messagesByLocale.keys())) {\r\n if (!detectedLocales.has(loadedLocale)) {\r\n __localizationState.messagesByLocale.delete(loadedLocale);\r\n }\r\n }\r\n}\r\n\r\nfunction __splitTextWhitespace(value) {\r\n const input = String(value || \"\");\r\n const leading = (input.match(/^\\s*/) || [\"\"])[0];\r\n const trailing = (input.match(/\\s*$/) || [\"\"])[0];\r\n const start = leading.length;\r\n const end = input.length - trailing.length;\r\n const core = end >= start ? input.slice(start, end) : \"\";\r\n\r\n return { leading, core, trailing };\r\n}\r\n\r\nfunction __escapeRegExp(value) {\r\n return String(value || \"\").replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n\r\nfunction __extractValuesFromTemplate(template, text) {\r\n const inputTemplate = typeof template === \"string\" ? template : String(template || \"\");\r\n const inputText = typeof text === \"string\" ? text : String(text || \"\");\r\n const placeholderPattern = /\\{(\\d+)\\}/g;\r\n\r\n const matches = Array.from(inputTemplate.matchAll(placeholderPattern));\r\n if (!matches.length) {\r\n return inputTemplate === inputText ? [] : null;\r\n }\r\n\r\n const placeholderOrder = [];\r\n let pattern = \"^\";\r\n let lastIndex = 0;\r\n\r\n for (const match of matches) {\r\n const matchIndex = match.index ?? 0;\r\n pattern += __escapeRegExp(inputTemplate.slice(lastIndex, matchIndex));\r\n pattern += \"([\\\\s\\\\S]*?)\";\r\n placeholderOrder.push(Number(match[1]));\r\n lastIndex = matchIndex + match[0].length;\r\n }\r\n\r\n pattern += __escapeRegExp(inputTemplate.slice(lastIndex));\r\n pattern += \"$\";\r\n\r\n const result = new RegExp(pattern).exec(inputText);\r\n if (!result) {\r\n return null;\r\n }\r\n\r\n const values = [];\r\n for (let groupIndex = 1; groupIndex < result.length; groupIndex += 1) {\r\n const placeholderIndex = placeholderOrder[groupIndex - 1];\r\n const extractedValue = result[groupIndex];\r\n\r\n if (\r\n Object.prototype.hasOwnProperty.call(values, placeholderIndex) &&\r\n values[placeholderIndex] !== extractedValue\r\n ) {\r\n return null;\r\n }\r\n\r\n values[placeholderIndex] = extractedValue;\r\n }\r\n\r\n return values;\r\n}\r\n\r\nfunction __resolveTemplateValuesForText(key, text) {\r\n if (typeof key !== \"string\" || !key.length) {\r\n return [];\r\n }\r\n\r\n const templates = [key];\r\n for (const [, messages] of __localizationState.messagesByLocale.entries()) {\r\n const candidate = messages?.[key];\r\n if (typeof candidate === \"string\" && candidate.length) {\r\n templates.push(candidate);\r\n }\r\n }\r\n\r\n for (const template of templates) {\r\n const extracted = __extractValuesFromTemplate(template, text);\r\n if (extracted) {\r\n return extracted;\r\n }\r\n }\r\n\r\n return [];\r\n}\r\n\r\nfunction __findRequestedKeyForText(coreText) {\r\n if (!coreText) {\r\n return null;\r\n }\r\n\r\n const indexedKeys = __localizationState.valueToKeys.get(coreText);\r\n if (indexedKeys && indexedKeys.size > 0) {\r\n for (const key of indexedKeys) {\r\n if (__localizationState.requestedKeys.has(key)) {\r\n return key;\r\n }\r\n }\r\n }\r\n\r\n if (__localizationState.requestedKeys.has(coreText)) {\r\n return coreText;\r\n }\r\n\r\n const loadedEntries = Array.from(__localizationState.messagesByLocale.entries());\r\n for (const key of __localizationState.requestedKeys) {\r\n for (const [, messages] of loadedEntries) {\r\n if (messages && messages[key] === coreText) {\r\n return key;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction __findRequestedSubsegmentForText(coreText) {\r\n if (!coreText) {\r\n return null;\r\n }\r\n\r\n let bestMatch = null;\r\n\r\n for (const [indexedValue, indexedKeys] of __localizationState.valueToKeys.entries()) {\r\n if (typeof indexedValue !== \"string\" || !indexedValue.length) {\r\n continue;\r\n }\r\n\r\n if (indexedValue === coreText) {\r\n continue;\r\n }\r\n\r\n const start = coreText.indexOf(indexedValue);\r\n if (start === -1) {\r\n continue;\r\n }\r\n\r\n for (const key of indexedKeys) {\r\n if (!__localizationState.requestedKeys.has(key)) {\r\n continue;\r\n }\r\n\r\n const values = __resolveTemplateValuesForText(key, indexedValue);\r\n const candidate = {\r\n key,\r\n matchedText: indexedValue,\r\n start,\r\n end: start + indexedValue.length,\r\n values,\r\n };\r\n\r\n if (!bestMatch || candidate.matchedText.length > bestMatch.matchedText.length) {\r\n bestMatch = candidate;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n return bestMatch;\r\n}\r\n\r\nasync function __localizeTextNode(textNode) {\r\n if (!textNode || textNode.nodeType !== 3) {\r\n return;\r\n }\r\n\r\n const parentElement = textNode.parentElement || null;\r\n if (!parentElement) {\r\n return;\r\n }\r\n\r\n const { leading, core, trailing } = __splitTextWhitespace(textNode.nodeValue);\r\n if (!core) {\r\n return;\r\n }\r\n\r\n let key = __localizationState.textNodeKeyMap.get(textNode) || null;\r\n if (!key || !__localizationState.requestedKeys.has(key)) {\r\n key = __findRequestedKeyForText(core);\r\n }\r\n\r\n if (!key) {\r\n const segmentMatch = __findRequestedSubsegmentForText(core);\r\n if (!segmentMatch) {\r\n return;\r\n }\r\n\r\n const scopedLocale = __resolveContextLocale({ element: parentElement });\r\n await __loadLocaleInternal(scopedLocale, \"text-node\");\r\n\r\n const translated = __resolveTranslation(\r\n segmentMatch.key,\r\n segmentMatch.values,\r\n { element: parentElement },\r\n null\r\n );\r\n const translatedText = segmentMatch.values.length\r\n ? __replacePlaceholders(translated, (index) => segmentMatch.values[index])\r\n : translated;\r\n const localizedCore =\r\n core.slice(0, segmentMatch.start) +\r\n translatedText +\r\n core.slice(segmentMatch.end);\r\n const localizedText = `${leading}${localizedCore}${trailing}`;\r\n\r\n if (localizedText !== textNode.nodeValue) {\r\n textNode.nodeValue = localizedText;\r\n }\r\n return;\r\n }\r\n\r\n __localizationState.textNodeKeyMap.set(textNode, key);\r\n\r\n const scopedLocale = __resolveContextLocale({ element: parentElement });\r\n await __loadLocaleInternal(scopedLocale, \"text-node\");\r\n\r\n const values = __resolveTemplateValuesForText(key, core);\r\n const translated = __resolveTranslation(key, values, { element: parentElement }, null);\r\n const translatedText = values.length\r\n ? __replacePlaceholders(translated, (index) => values[index])\r\n : translated;\r\n const nextText = `${leading}${translatedText}${trailing}`;\r\n\r\n if (nextText !== textNode.nodeValue) {\r\n textNode.nodeValue = nextText;\r\n }\r\n}\r\n\r\nasync function __localizeRequestedTextNodes() {\r\n if (typeof document === \"undefined\" || __localizationState.requestedKeys.size === 0) {\r\n return;\r\n }\r\n\r\n const root = document.body || document.documentElement;\r\n if (!root || typeof document.createTreeWalker !== \"function\") {\r\n return;\r\n }\r\n\r\n const roots = [];\r\n const seenRoots = new Set();\r\n\r\n const addRoot = (candidateRoot) => {\r\n if (!candidateRoot || seenRoots.has(candidateRoot)) {\r\n return;\r\n }\r\n\r\n seenRoots.add(candidateRoot);\r\n roots.push(candidateRoot);\r\n };\r\n\r\n addRoot(root);\r\n\r\n for (let index = 0; index < roots.length; index += 1) {\r\n const currentRoot = roots[index];\r\n if (!currentRoot || typeof currentRoot.querySelectorAll !== \"function\") {\r\n continue;\r\n }\r\n\r\n const elements = currentRoot.querySelectorAll(\"*\");\r\n for (const element of elements) {\r\n const shadowRoot = element?.shadowRoot;\r\n if (shadowRoot) {\r\n addRoot(shadowRoot);\r\n }\r\n }\r\n }\r\n\r\n const nodes = [];\r\n\r\n for (const scanRoot of roots) {\r\n const walker = document.createTreeWalker(scanRoot, NodeFilter.SHOW_TEXT);\r\n while (walker.nextNode()) {\r\n nodes.push(walker.currentNode);\r\n }\r\n }\r\n\r\n for (const node of nodes) {\r\n await __localizeTextNode(node);\r\n }\r\n}\r\n\r\nfunction __getElementAttributeKeyMap(element) {\r\n let map = __localizationState.attributeKeyMap.get(element);\r\n if (!map) {\r\n map = new Map();\r\n __localizationState.attributeKeyMap.set(element, map);\r\n }\r\n return map;\r\n}\r\n\r\nasync function __localizeAttribute(element, attrName) {\r\n if (!element || typeof element.getAttribute !== \"function\") {\r\n return;\r\n }\r\n\r\n const rawValue = element.getAttribute(attrName);\r\n if (typeof rawValue !== \"string\" || !rawValue.length) {\r\n return;\r\n }\r\n\r\n const keyMap = __getElementAttributeKeyMap(element);\r\n let key = keyMap.get(attrName) || null;\r\n\r\n if (!key || !__localizationState.requestedKeys.has(key)) {\r\n key = __findRequestedKeyForText(rawValue);\r\n }\r\n\r\n if (!key) {\r\n const segmentMatch = __findRequestedSubsegmentForText(rawValue);\r\n if (!segmentMatch) {\r\n return;\r\n }\r\n\r\n const scopedLocale = __resolveContextLocale({ element });\r\n await __loadLocaleInternal(scopedLocale, \"attribute\");\r\n\r\n const translated = __resolveTranslation(segmentMatch.key, segmentMatch.values, { element }, null);\r\n const translatedText = segmentMatch.values.length\r\n ? __replacePlaceholders(translated, (index) => segmentMatch.values[index])\r\n : translated;\r\n\r\n const localizedValue =\r\n rawValue.slice(0, segmentMatch.start) +\r\n translatedText +\r\n rawValue.slice(segmentMatch.end);\r\n\r\n if (localizedValue !== rawValue) {\r\n element.setAttribute(attrName, localizedValue);\r\n }\r\n\r\n keyMap.set(attrName, segmentMatch.key);\r\n return;\r\n }\r\n\r\n keyMap.set(attrName, key);\r\n\r\n const scopedLocale = __resolveContextLocale({ element });\r\n await __loadLocaleInternal(scopedLocale, \"attribute\");\r\n\r\n const values = __resolveTemplateValuesForText(key, rawValue);\r\n const translated = __resolveTranslation(key, values, { element }, null);\r\n const translatedText = values.length\r\n ? __replacePlaceholders(translated, (index) => values[index])\r\n : translated;\r\n\r\n if (translatedText !== rawValue) {\r\n element.setAttribute(attrName, translatedText);\r\n }\r\n}\r\n\r\nasync function __localizeRequestedAttributes() {\r\n if (typeof document === \"undefined\" || __localizationState.requestedKeys.size === 0) {\r\n return;\r\n }\r\n\r\n const root = document.body || document.documentElement;\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const roots = [];\r\n const seenRoots = new Set();\r\n\r\n const addRoot = (candidateRoot) => {\r\n if (!candidateRoot || seenRoots.has(candidateRoot)) {\r\n return;\r\n }\r\n\r\n seenRoots.add(candidateRoot);\r\n roots.push(candidateRoot);\r\n };\r\n\r\n addRoot(root);\r\n\r\n for (let index = 0; index < roots.length; index += 1) {\r\n const currentRoot = roots[index];\r\n if (!currentRoot || typeof currentRoot.querySelectorAll !== \"function\") {\r\n continue;\r\n }\r\n\r\n const elements = currentRoot.querySelectorAll(\"*\");\r\n for (const element of elements) {\r\n const shadowRoot = element?.shadowRoot;\r\n if (shadowRoot) {\r\n addRoot(shadowRoot);\r\n }\r\n }\r\n }\r\n\r\n for (const scanRoot of roots) {\r\n if (!scanRoot || typeof scanRoot.querySelectorAll !== \"function\") {\r\n continue;\r\n }\r\n\r\n const elements = scanRoot.querySelectorAll(\"*\");\r\n for (const element of elements) {\r\n for (const attrName of __LOCALIZABLE_ATTRIBUTES) {\r\n if (element.hasAttribute(attrName)) {\r\n await __localizeAttribute(element, attrName);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nasync function __reconcileLocalization() {\r\n const detectedLocales = __collectDetectedLocales();\r\n await __ensureDetectedLocalesLoaded(detectedLocales);\r\n await __localizeRequestedTextNodes();\r\n await __localizeRequestedAttributes();\r\n __pruneUndetectedLocales(detectedLocales);\r\n}\r\n\r\nfunction __scheduleReconcile() {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (__localizationState.reconcileTimer) {\r\n clearTimeout(__localizationState.reconcileTimer);\r\n }\r\n\r\n __localizationState.reconcileTimer = setTimeout(() => {\r\n __localizationState.reconcileTimer = null;\r\n __reconcileLocalization();\r\n }, 16);\r\n}\r\n\r\nfunction __attachLangObserver() {\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\r\n return;\r\n }\r\n\r\n if (__localizationState.observer) {\r\n __localizationState.observer.disconnect();\r\n __localizationState.observer = null;\r\n }\r\n\r\n if (typeof MutationObserver !== \"function\") {\r\n return;\r\n }\r\n\r\n const observer = new MutationObserver(() => {\r\n __scheduleReconcile();\r\n });\r\n\r\n observer.observe(document.documentElement, {\r\n attributes: true,\r\n attributeFilter: [\"lang\"],\r\n childList: true,\r\n characterData: true,\r\n subtree: true,\r\n });\r\n\r\n __localizationState.observer = observer;\r\n}\r\n\r\nfunction __resolveTranslation(key, values = [], options = {}, template = null) {\r\n const requestedLocale = __resolveContextLocale(options);\r\n const resolvedMessages = __getLocaleMessages(requestedLocale);\r\n\r\n if (!resolvedMessages) {\r\n __loadLocaleInternal(requestedLocale, \"msg\");\r\n }\r\n\r\n const targetMessages = __getLocaleMessages(requestedLocale)?.messages || {};\r\n const defaultMessages =\r\n __getLocaleMessages(__localizationState.defaultLocale)?.messages || {};\r\n\r\n const context = {\r\n key,\r\n values,\r\n options,\r\n locale: requestedLocale,\r\n defaultLocale: __localizationState.defaultLocale,\r\n messages: targetMessages,\r\n messagesByLocale: Object.fromEntries(\r\n Array.from(__localizationState.messagesByLocale.entries())\r\n ),\r\n template,\r\n };\r\n\r\n let translated;\r\n const localeLoaded = Boolean(resolvedMessages);\r\n const isDefaultLocale = requestedLocale === __localizationState.defaultLocale;\r\n if (typeof __localizationState.provider?.translate === \"function\") {\r\n translated = __localizationState.provider.translate(context);\r\n }\r\n\r\n let fallbackKind = null;\r\n\r\n if (translated === undefined || translated === null) {\r\n translated = targetMessages[key];\r\n }\r\n\r\n if (translated === undefined || translated === null) {\r\n translated = defaultMessages[key];\r\n fallbackKind = translated === undefined || translated === null ? null : \"default\";\r\n }\r\n\r\n if (translated === undefined || translated === null) {\r\n translated = key;\r\n fallbackKind = \"key\";\r\n }\r\n\r\n if (localeLoaded && !isDefaultLocale && fallbackKind) {\r\n const warningKey = `${requestedLocale}::${key}`;\r\n if (!__localizationState.missingWarnings.has(warningKey)) {\r\n __localizationState.missingWarnings.add(warningKey);\r\n pdsLog(\r\n \"warn\",\r\n `[i18n] Missing translation for locale \"${requestedLocale}\" and key \"${key}\"; using ${fallbackKind} fallback.`\r\n );\r\n }\r\n }\r\n\r\n const resolved = typeof translated === \"string\" ? translated : String(translated);\r\n __indexTranslatedValue(key, resolved);\r\n\r\n if (Array.isArray(values) && values.length > 0) {\r\n const materialized = __replacePlaceholders(resolved, (index) => values[index]);\r\n if (materialized !== resolved) {\r\n __indexTranslatedValue(key, materialized);\r\n }\r\n }\r\n\r\n return resolved;\r\n}\r\n\r\nexport function getLocalizationState() {\r\n const defaultBundle = __getLocaleMessages(__localizationState.defaultLocale);\r\n return {\r\n locale: __localizationState.defaultLocale,\r\n messages: { ...(defaultBundle?.messages || {}) },\r\n loadedLocales: Array.from(__localizationState.messagesByLocale.keys()),\r\n hasProvider: Boolean(__localizationState.provider),\r\n };\r\n}\r\n\r\nexport function configureLocalization(config = null) {\r\n if (__localizationState.observer) {\r\n __localizationState.observer.disconnect();\r\n __localizationState.observer = null;\r\n }\r\n if (__localizationState.reconcileTimer) {\r\n clearTimeout(__localizationState.reconcileTimer);\r\n __localizationState.reconcileTimer = null;\r\n }\r\n\r\n __localizationState.defaultLocale = __DEFAULT_LOCALE__;\r\n __localizationState.provider = null;\r\n __localizationState.messagesByLocale.clear();\r\n __localizationState.loadingByLocale.clear();\r\n __localizationState.requestedKeys.clear();\r\n __localizationState.textNodeKeyMap = new WeakMap();\r\n __localizationState.attributeKeyMap = new WeakMap();\r\n __localizationState.valueToKeys.clear();\r\n __localizationState.missingWarnings.clear();\r\n\r\n if (!config || typeof config !== \"object\") {\r\n return getLocalizationState();\r\n }\r\n\r\n if (typeof config.locale === \"string\" && config.locale.trim()) {\r\n __localizationState.defaultLocale = __resolveLocaleCandidate(config.locale);\r\n }\r\n\r\n if (Object.prototype.hasOwnProperty.call(config, \"messages\")) {\r\n __setLocaleMessages(__localizationState.defaultLocale, config.messages);\r\n }\r\n\r\n if (\r\n Object.prototype.hasOwnProperty.call(config, \"provider\") ||\r\n Object.prototype.hasOwnProperty.call(config, \"translate\") ||\r\n Object.prototype.hasOwnProperty.call(config, \"loadLocale\") ||\r\n Object.prototype.hasOwnProperty.call(config, \"setLocale\") ||\r\n Object.prototype.hasOwnProperty.call(config, \"resolveLocale\")\r\n ) {\r\n __localizationState.provider = __resolveProvider(config);\r\n }\r\n\r\n if (__localizationState.provider?.resolveLocale) {\r\n __localizationState.defaultLocale = __resolveLocaleCandidate(\r\n __localizationState.defaultLocale\r\n );\r\n }\r\n\r\n __attachLangObserver();\r\n __scheduleReconcile();\r\n\r\n return getLocalizationState();\r\n}\r\n\r\nexport async function loadLocale(locale) {\r\n const targetLocale = __resolveLocaleCandidate(locale);\r\n await __loadLocaleInternal(targetLocale, \"explicit-load\");\r\n const bundle = __getLocaleMessages(targetLocale)?.messages || {};\r\n return { ...bundle };\r\n}\r\n\r\nexport async function setLocale(locale, { load = true } = {}) {\r\n __localizationState.defaultLocale = __resolveLocaleCandidate(locale);\r\n if (load) {\r\n await __loadLocaleInternal(__localizationState.defaultLocale, \"set-default\");\r\n }\r\n __scheduleReconcile();\r\n return __localizationState.defaultLocale;\r\n}\r\n\r\nexport const joinStringsAndValues = (strings, values, options = {}) => {\r\n const messageKey = __collateStrings(strings);\r\n __registerRequestedKey(messageKey);\r\n const translated = __resolveTranslation(messageKey, values, options, {\r\n strings,\r\n values,\r\n });\r\n\r\n return __replacePlaceholders(translated, (index) => values[index]);\r\n};\r\n\r\nexport const str = (strings, ...values) => ({\r\n strTag: true,\r\n strings: Array.from(strings),\r\n values,\r\n raw: Array.from(strings?.raw || []),\r\n});\r\n\r\nexport const msg = (template, options = {}) => {\r\n if (!template) {\r\n return \"\";\r\n }\r\n\r\n if (__isStrTagged(template)) {\r\n return joinStringsAndValues(template.strings, template.values, options);\r\n }\r\n\r\n const key = String(template);\r\n __registerRequestedKey(key);\r\n const translated = __resolveTranslation(key, [], options, null);\r\n\r\n if (\r\n !options?.element &&\r\n !options?.scope &&\r\n !options?.host &&\r\n !options?.contextElement &&\r\n !options?.lang\r\n ) {\r\n __scheduleReconcile();\r\n }\r\n\r\n return translated;\r\n};\r\n", "export class PDSBase extends EventTarget {\r\n constructor() {\r\n super();\r\n /** @type {'live' | 'static' | null} */\r\n this.mode = null;\r\n /** @type {Record<string, any> | null} */\r\n this.compiled = null;\r\n /** @type {(level: 'log' | 'warn' | 'error' | 'debug' | 'info', message?: any, ...data: any[]) => void} */\r\n this.log = () => {};\r\n /** @type {((level: 'log' | 'warn' | 'error' | 'debug' | 'info', message?: any, ...data: any[]) => void) | null} */\r\n this.logHandler = null;\r\n }\r\n}\r\n\r\nexport const PDS_SINGLETON_KEY = \"__PURE_DS_PDS_SINGLETON__\";\r\n\r\nconst globalScope = typeof globalThis !== \"undefined\" ? globalThis : window;\r\nconst existingPDS = globalScope?.[PDS_SINGLETON_KEY];\r\n\r\nexport const PDS =\r\n existingPDS && typeof existingPDS.addEventListener === \"function\"\r\n ? existingPDS\r\n : new PDSBase();\r\n\r\nif (globalScope) {\r\n globalScope[PDS_SINGLETON_KEY] = PDS;\r\n}\r\n\r\nif (typeof PDS.log !== \"function\") {\r\n PDS.log = (level = \"log\", message, ...data) => {\r\n if (typeof console === \"undefined\") return;\r\n const method =\r\n typeof console[level] === \"function\"\r\n ? console[level].bind(console)\r\n : typeof console.log === \"function\"\r\n ? console.log.bind(console)\r\n : null;\r\n if (!method) return;\r\n if (data.length > 0) {\r\n method(message, ...data);\r\n } else {\r\n method(message);\r\n }\r\n };\r\n}\r\n\r\nif (typeof PDS.logHandler !== \"function\") {\r\n PDS.logHandler = null;\r\n}\r\n", "\n// ============================================================================\n// PDS REGISTRY - Global mode manager for live vs static mode\n// ============================================================================\n\nimport { PDS } from \"../pds-singleton.js\";\n\nclass PDSRegistry {\n constructor() {\n this._mode = \"static\"; // Default to static mode\n this._staticPaths = {\n tokens: \"/assets/pds/styles/pds-tokens.css.js\",\n primitives: \"/assets/pds/styles/pds-primitives.css.js\",\n components: \"/assets/pds/styles/pds-components.css.js\",\n utilities: \"/assets/pds/styles/pds-utilities.css.js\",\n styles: \"/assets/pds/styles/pds-styles.css.js\",\n };\n }\n\n /**\n * Switch to live mode\n */\n setLiveMode() {\n this._mode = \"live\";\n }\n\n /**\n * Switch to static mode with custom paths\n * Called by consumers who want to use static CSS files\n */\n setStaticMode(paths = {}) {\n this._mode = \"static\";\n this._staticPaths = { ...this._staticPaths, ...paths };\n }\n\n /**\n * Get stylesheet for adoption in shadow DOM\n * Returns CSSStyleSheet object (constructable stylesheet)\n */\n async getStylesheet(layer) {\n if (this._mode === \"live\") {\n // In live mode, stylesheets should be retrieved from Generator.instance\n // If we are here, it means adoptLayers fell back or something is wrong\n return null;\n } else {\n // Import from static path\n try {\n const module = await import(/* @vite-ignore */ this._staticPaths[layer]);\n return module[layer]; // Return exported stylesheet\n } catch (error) {\n // Route through centralized logger fallback behavior\n PDS.log(\"error\", `Registry: failed to load static ${layer}:`, error);\n PDS.log(\"error\", `Registry: looking for ${this._staticPaths[layer]}`);\n PDS.log(\"error\", \"Registry: make sure you've run 'npm run pds:build' and configured PDS.start() with the correct static.root path\");\n // Return empty stylesheet as fallback\n const fallback = new CSSStyleSheet();\n fallback.replaceSync(\"/* Failed to load \" + layer + \" */\");\n return fallback;\n }\n }\n }\n\n /**\n * Get current mode\n */\n get mode() {\n return this._mode;\n }\n\n /**\n * Check if in live mode\n */\n get isLive() {\n return this._mode === \"live\";\n }\n}\n\n// Export singleton instance\nexport const registry = new PDSRegistry();\n", "/**\r\n * Runtime helpers for applying and adopting PDS styles in live and static modes.\r\n * These functions are intentionally separated from the Generator to keep the\r\n * generator bundle lean and optional.\r\n */\r\nimport { registry as pdsRegistry } from \"./pds-registry.js\";\r\nimport { PDS } from \"../pds-singleton.js\";\r\n\r\n/**\r\n * Install runtime styles for PDS using constructable stylesheets when\r\n * available, otherwise update a single <style id=\"pds-runtime-stylesheet\">.\r\n * This approach reduces flicker and avoids link/blob swapping.\r\n */\r\nexport function installRuntimeStyles(cssText) {\r\n try {\r\n if (typeof document === \"undefined\") return; // server-side guard\r\n\r\n // Preferred: constructable stylesheet (fast, atomic)\r\n if (\r\n typeof CSSStyleSheet !== \"undefined\" &&\r\n \"adoptedStyleSheets\" in Document.prototype\r\n ) {\r\n const sheet = new CSSStyleSheet();\r\n // replaceSync is synchronous and atomic for the stylesheet\r\n sheet.replaceSync(cssText);\r\n\r\n // Tag it so we can keep existing non-PDS sheets\r\n sheet._pds = true;\r\n\r\n const others = (document.adoptedStyleSheets || []).filter(\r\n (s) => s._pds !== true\r\n );\r\n document.adoptedStyleSheets = [...others, sheet];\r\n return;\r\n }\r\n\r\n // Fallback: single <style> element in the document head\r\n const styleId = \"pds-runtime-stylesheet\";\r\n let el = document.getElementById(styleId);\r\n if (!el) {\r\n el = document.createElement(\"style\");\r\n el.id = styleId;\r\n el.type = \"text/css\";\r\n const head = document.head || document.getElementsByTagName(\"head\")[0];\r\n if (head) head.appendChild(el);\r\n else document.documentElement.appendChild(el);\r\n }\r\n\r\n // Update the stylesheet content in place\r\n el.textContent = cssText;\r\n } catch (err) {\r\n PDS.log(\"warn\", \"installRuntimeStyles failed:\", err);\r\n }\r\n}\r\n\r\n/**\r\n * Apply generated styles to the current document.\r\n * @param {Generator} [generator] - Optional Generator instance (defaults to singleton)\r\n */\r\nexport function applyStyles(generator) {\r\n const target = generator;\r\n\r\n if (!target || typeof target !== \"object\") {\r\n PDS.log(\r\n \"error\",\r\n \"Runtime applyStyles requires an explicit generator instance in live mode\"\r\n );\r\n return;\r\n }\r\n\r\n // Preferred: apply layered CSS so tokens + primitives + components + utilities\r\n // are available in light DOM (ensures primitives like :where(button):active apply)\r\n const cssText = target.layeredCSS || target.css || \"\";\r\n if (!cssText) {\r\n target.options?.log?.(\r\n \"warn\",\r\n \"Runtime: no CSS available on generator to apply\"\r\n );\r\n return;\r\n }\r\n\r\n // Install/update runtime styles atomically to avoid flicker\r\n installRuntimeStyles(cssText);\r\n}\r\n\r\n// ============================================================================\r\n// PDS ADOPTER - Helper for web components\r\n// ============================================================================\r\n\r\n/**\r\n * Adopt primitives stylesheet into a shadow root.\r\n * This is the primary method components should use.\r\n *\r\n * @param {ShadowRoot} shadowRoot - The shadow root to adopt into\r\n * @param {CSSStyleSheet[]} additionalSheets - Additional component-specific stylesheets\r\n * @returns {Promise<void>}\r\n */\r\nexport async function adoptPrimitives(\r\n shadowRoot,\r\n additionalSheets = [],\r\n generator = null\r\n) {\r\n try {\r\n // Prefer live generator when provided\r\n const primitives = generator?.primitivesStylesheet\r\n ? generator.primitivesStylesheet\r\n : await pdsRegistry.getStylesheet(\"primitives\");\r\n\r\n // Adopt primitives + additional sheets\r\n shadowRoot.adoptedStyleSheets = [primitives, ...additionalSheets];\r\n } catch (error) {\r\n const componentName = shadowRoot.host?.tagName?.toLowerCase() || \"unknown\";\r\n PDS.log(\r\n \"error\",\r\n `Adopter: <${componentName}> failed to adopt primitives:`,\r\n error\r\n );\r\n // Continue with just additional sheets as fallback\r\n shadowRoot.adoptedStyleSheets = additionalSheets;\r\n }\r\n}\r\n\r\n/**\r\n * Adopt multiple layers into a shadow root.\r\n * For complex components that need more than just primitives.\r\n *\r\n * @param {ShadowRoot} shadowRoot - The shadow root to adopt into\r\n * @param {string[]} layers - Array of layer names to adopt (e.g., ['tokens', 'primitives', 'components'])\r\n * @param {CSSStyleSheet[]} additionalSheets - Additional component-specific stylesheets\r\n * @returns {Promise<void>}\r\n */\r\nexport async function adoptLayers(\r\n shadowRoot,\r\n layers = [\"primitives\"],\r\n additionalSheets = [],\r\n generator = null\r\n) {\r\n const safeAdditionalSheets = Array.isArray(additionalSheets)\r\n ? additionalSheets.filter(Boolean)\r\n : [];\r\n\r\n // Apply component-local sheets immediately so lazy-loaded components avoid\r\n // transient UA default styling while shared layers are resolving.\r\n if (safeAdditionalSheets.length) {\r\n const existing = Array.isArray(shadowRoot.adoptedStyleSheets)\r\n ? shadowRoot.adoptedStyleSheets\r\n : [];\r\n const nonAdditional = existing.filter(\r\n (sheet) => !safeAdditionalSheets.includes(sheet)\r\n );\r\n shadowRoot.adoptedStyleSheets = [...nonAdditional, ...safeAdditionalSheets];\r\n }\r\n\r\n try {\r\n // Get all requested stylesheets\r\n const stylesheets = await Promise.all(\r\n layers.map(async (layer) => {\r\n if (generator) {\r\n switch (layer) {\r\n case \"tokens\":\r\n return generator.tokensStylesheet;\r\n case \"primitives\":\r\n return generator.primitivesStylesheet;\r\n case \"components\":\r\n return generator.componentsStylesheet;\r\n case \"utilities\":\r\n return generator.utilitiesStylesheet;\r\n default:\r\n break;\r\n }\r\n }\r\n return pdsRegistry.getStylesheet(layer);\r\n })\r\n );\r\n\r\n // Filter out any null results\r\n const validStylesheets = stylesheets.filter((sheet) => sheet !== null);\r\n\r\n // Adopt all layers + additional sheets\r\n shadowRoot.adoptedStyleSheets = [...validStylesheets, ...safeAdditionalSheets];\r\n } catch (error) {\r\n const componentName = shadowRoot.host?.tagName?.toLowerCase() || \"unknown\";\r\n PDS.log(\r\n \"error\",\r\n `Adopter: <${componentName}> failed to adopt layers:`,\r\n error\r\n );\r\n // Continue with just additional sheets as fallback\r\n shadowRoot.adoptedStyleSheets = safeAdditionalSheets;\r\n }\r\n}\r\n\r\n/**\r\n * Create a component-specific stylesheet from CSS string.\r\n * Helper to create constructable stylesheets.\r\n *\r\n * @param {string} css - CSS string\r\n * @returns {CSSStyleSheet}\r\n */\r\nexport function createStylesheet(css) {\r\n const sheet = new CSSStyleSheet();\r\n sheet.replaceSync(css);\r\n return sheet;\r\n}\r\n", "import { msg } from \"../common/localization.js\";\n\n/**\n * PDS Enhancers - Single Source of Truth\n *\n * This file defines all progressive enhancements for the Pure Design System.\n * Each enhancer has:\n * - selector: CSS selector to target elements\n * - run: Enhancement function (added at the end)\n */\n\n// ============================================================================\n// ENHANCEMENT RUNTIME DEFINITIONS\n// ============================================================================\n\nconst enhancerDefinitions = [\n { selector: \".accordion\" },\n { selector: \"nav[data-dropdown]\" },\n { selector: \"label[data-toggle]\" },\n { selector: \"label[data-color]\" },\n { selector: 'input[type=\"range\"]' },\n { selector: \"form[data-required]\" },\n { selector: \"fieldset[role=group][data-open]\" },\n { selector: \"[data-clip]\" },\n { selector: \"button, a[class*='btn-']\" },\n];\n\n// ============================================================================\n// ENHANCEMENT RUNTIME FUNCTIONS\n// ============================================================================\n\nfunction enhanceAccordion(elem) {\n if (elem.dataset.enhancedAccordion) return;\n elem.dataset.enhancedAccordion = \"true\";\n\n elem.addEventListener(\n \"toggle\",\n (event) => {\n // Only handle toggle events from direct child details elements\n // to avoid closing parent details when nested accordions are used\n if (event.target.open && event.target.parentElement === elem) {\n elem.querySelectorAll(\":scope > details[open]\").forEach((details) => {\n if (details !== event.target) {\n details.open = false;\n }\n });\n }\n },\n true,\n );\n}\n\nfunction enhanceDropdown(elem) {\n if (elem.dataset.enhancedDropdown) return;\n elem.dataset.enhancedDropdown = \"true\";\n const menu = elem.lastElementChild;\n\n if (!menu) return;\n\n const trigger =\n elem.querySelector(\"[data-dropdown-toggle]\") ||\n elem.querySelector(\"button\");\n\n const supportsPopover =\n typeof HTMLElement !== \"undefined\" &&\n \"showPopover\" in HTMLElement.prototype &&\n \"hidePopover\" in HTMLElement.prototype;\n\n if (trigger && !trigger.hasAttribute(\"type\")) {\n trigger.setAttribute(\"type\", \"button\");\n }\n\n if (!menu.id) {\n menu.id = `dropdown-${Math.random().toString(36).slice(2, 9)}`;\n }\n\n const isMenu = menu.tagName?.toLowerCase() === \"menu\";\n const VIEWPORT_PADDING = 8;\n if (isMenu && !menu.hasAttribute(\"role\")) {\n menu.setAttribute(\"role\", \"menu\");\n }\n if (!menu.hasAttribute(\"aria-hidden\")) {\n menu.setAttribute(\"aria-hidden\", \"true\");\n }\n\n if (trigger) {\n trigger.setAttribute(\"aria-haspopup\", \"true\");\n trigger.setAttribute(\"aria-controls\", menu.id);\n trigger.setAttribute(\"aria-expanded\", \"false\");\n }\n\n if (!supportsPopover) {\n const warnKey = \"__PDS_DROPDOWN_POPOVER_WARNED__\";\n if (!globalThis[warnKey]) {\n globalThis[warnKey] = true;\n console.warn(\n \"[PDS] nav[data-dropdown] requires the Popover API. Add a popover polyfill (recommended: @oddbird/popover-polyfill) for browsers without support.\",\n );\n }\n return;\n }\n\n menu.setAttribute(\"popover\", \"auto\");\n\n const measureMenuSize = () => {\n const previousStyle = menu.getAttribute(\"style\");\n menu.style.visibility = \"hidden\";\n menu.style.display = \"inline-block\";\n menu.style.pointerEvents = \"none\";\n\n const rect = menu.getBoundingClientRect();\n const width = Math.max(menu.offsetWidth || 0, menu.scrollWidth || 0, rect.width || 0, 1);\n const height = Math.max(\n menu.offsetHeight || 0,\n menu.scrollHeight || 0,\n rect.height || 0,\n 1,\n );\n\n if (previousStyle === null) {\n menu.removeAttribute(\"style\");\n } else {\n menu.setAttribute(\"style\", previousStyle);\n }\n\n return { width, height };\n };\n\n const isPopoverOpen = () => {\n try {\n return menu.matches(\":popover-open\");\n } catch {\n return false;\n }\n };\n\n const syncClosedState = () => {\n menu.setAttribute(\"aria-hidden\", \"true\");\n trigger?.setAttribute(\"aria-expanded\", \"false\");\n };\n\n const syncOpenState = () => {\n menu.setAttribute(\"aria-hidden\", \"false\");\n trigger?.setAttribute(\"aria-expanded\", \"true\");\n };\n\n const resolveDirection = () => {\n const mode = (\n elem.getAttribute(\"data-direction\") ||\n elem.getAttribute(\"data-dropdown-direction\") ||\n elem.getAttribute(\"data-mode\") ||\n \"auto\"\n ).toLowerCase();\n if (mode === \"up\" || mode === \"down\") return mode;\n const anchorRect = (trigger || elem).getBoundingClientRect();\n const { height: menuHeight } = measureMenuSize();\n const spaceBelow = Math.max(0, window.innerHeight - anchorRect.bottom);\n const spaceAbove = Math.max(0, anchorRect.top);\n const fitsDown = spaceBelow >= menuHeight;\n const fitsUp = spaceAbove >= menuHeight;\n if (fitsDown && !fitsUp) return \"down\";\n if (fitsUp && !fitsDown) return \"up\";\n if (fitsDown && fitsUp) return \"down\";\n return spaceAbove > spaceBelow ? \"up\" : \"down\";\n };\n\n const resolveAlign = () => {\n const align = (\n elem.getAttribute(\"data-align\") ||\n elem.getAttribute(\"data-dropdown-align\") ||\n \"auto\"\n ).toLowerCase();\n if (\n align === \"left\" ||\n align === \"right\" ||\n align === \"start\" ||\n align === \"end\"\n ) {\n return align === \"start\" ? \"left\" : align === \"end\" ? \"right\" : align;\n }\n const anchorRect = (trigger || elem).getBoundingClientRect();\n const { width: menuWidth } = measureMenuSize();\n const spaceForLeftAligned = Math.max(0, window.innerWidth - anchorRect.left);\n const spaceForRightAligned = Math.max(0, anchorRect.right);\n const fitsLeft = spaceForLeftAligned >= menuWidth;\n const fitsRight = spaceForRightAligned >= menuWidth;\n\n if (fitsLeft && !fitsRight) return \"left\";\n if (fitsRight && !fitsLeft) return \"right\";\n if (fitsLeft && fitsRight) return \"left\";\n return spaceForRightAligned > spaceForLeftAligned ? \"right\" : \"left\";\n };\n\n const readLengthToken = (tokenName, fallback = 8) => {\n const raw = getComputedStyle(elem).getPropertyValue(tokenName).trim();\n if (!raw) return fallback;\n const probe = document.createElement(\"span\");\n probe.style.position = \"fixed\";\n probe.style.visibility = \"hidden\";\n probe.style.pointerEvents = \"none\";\n probe.style.height = raw;\n document.body.appendChild(probe);\n const parsed = Number.parseFloat(getComputedStyle(probe).height);\n probe.remove();\n return Number.isFinite(parsed) ? parsed : fallback;\n };\n\n const clearFloatingMenuPosition = () => {\n [\n \"position\",\n \"left\",\n \"top\",\n \"right\",\n \"bottom\",\n \"margin-top\",\n \"margin-bottom\",\n \"max-width\",\n \"max-inline-size\",\n \"max-height\",\n \"overflow\",\n ].forEach((prop) => menu.style.removeProperty(prop));\n };\n \n const positionPopoverMenu = () => {\n if (!isPopoverOpen()) return;\n\n const anchorRect = (trigger || elem).getBoundingClientRect();\n const viewport = window.visualViewport;\n const viewportWidth =\n viewport?.width || document.documentElement?.clientWidth || window.innerWidth;\n const viewportHeight =\n viewport?.height || document.documentElement?.clientHeight || window.innerHeight;\n const viewportOffsetLeft = viewport?.offsetLeft || 0;\n const viewportOffsetTop = viewport?.offsetTop || 0;\n const maxMenuWidth = Math.max(1, viewportWidth - VIEWPORT_PADDING * 2);\n const maxMenuHeight = Math.max(1, viewportHeight - VIEWPORT_PADDING * 2);\n\n menu.style.maxWidth = `${Math.round(maxMenuWidth)}px`;\n menu.style.maxInlineSize = `${Math.round(maxMenuWidth)}px`;\n menu.style.maxHeight = `${Math.round(maxMenuHeight)}px`;\n menu.style.overflow = \"auto\";\n\n const { width: menuWidth, height: menuHeight } = measureMenuSize();\n const spacing = readLengthToken(\"--spacing-2\", 8);\n const direction = resolveDirection();\n const align = resolveAlign();\n\n elem.dataset.dropdownDirection = direction;\n elem.dataset.dropdownAlign = align;\n\n let left = align === \"right\" ? anchorRect.right - menuWidth : anchorRect.left;\n if (menuWidth >= maxMenuWidth - 1) {\n left = viewportOffsetLeft + VIEWPORT_PADDING;\n } else {\n left = Math.max(\n viewportOffsetLeft + VIEWPORT_PADDING,\n Math.min(\n left,\n viewportOffsetLeft + viewportWidth - menuWidth - VIEWPORT_PADDING,\n ),\n );\n }\n\n let top =\n direction === \"up\"\n ? anchorRect.top - spacing - menuHeight\n : anchorRect.bottom + spacing;\n top = Math.max(\n viewportOffsetTop + VIEWPORT_PADDING,\n Math.min(\n top,\n viewportOffsetTop + viewportHeight - menuHeight - VIEWPORT_PADDING,\n ),\n );\n\n Object.assign(menu.style, {\n position: \"fixed\",\n left: `${Math.round(left)}px`,\n top: `${Math.round(top)}px`,\n right: \"auto\",\n bottom: \"auto\",\n marginTop: \"0\",\n marginBottom: \"0\",\n });\n };\n\n let repositionHandler = null;\n const bindReposition = () => {\n if (repositionHandler) return;\n repositionHandler = () => positionPopoverMenu();\n window.addEventListener(\"resize\", repositionHandler);\n window.addEventListener(\"scroll\", repositionHandler, true);\n };\n\n const unbindReposition = () => {\n if (!repositionHandler) return;\n window.removeEventListener(\"resize\", repositionHandler);\n window.removeEventListener(\"scroll\", repositionHandler, true);\n repositionHandler = null;\n };\n\n let configChangedHandler = null;\n let configRepositionFrame = null;\n const bindConfigChanged = () => {\n if (configChangedHandler || typeof document === \"undefined\") return;\n configChangedHandler = () => {\n if (!isPopoverOpen()) return;\n elem.dataset.dropdownDirection = resolveDirection();\n elem.dataset.dropdownAlign = resolveAlign();\n\n if (configRepositionFrame !== null) {\n cancelAnimationFrame(configRepositionFrame);\n }\n configRepositionFrame = requestAnimationFrame(() => {\n configRepositionFrame = null;\n if (!isPopoverOpen()) return;\n positionPopoverMenu();\n });\n };\n document.addEventListener(\"pds:config-changed\", configChangedHandler);\n };\n\n const unbindConfigChanged = () => {\n if (!configChangedHandler || typeof document === \"undefined\") return;\n document.removeEventListener(\"pds:config-changed\", configChangedHandler);\n configChangedHandler = null;\n if (configRepositionFrame !== null) {\n cancelAnimationFrame(configRepositionFrame);\n configRepositionFrame = null;\n }\n };\n\n menu.addEventListener(\"toggle\", (event) => {\n const isOpen = event.newState === \"open\";\n\n if (isOpen) {\n syncOpenState();\n positionPopoverMenu();\n bindReposition();\n bindConfigChanged();\n return;\n }\n\n syncClosedState();\n unbindReposition();\n unbindConfigChanged();\n clearFloatingMenuPosition();\n });\n\n const openMenu = () => {\n if (isPopoverOpen()) return;\n elem.dataset.dropdownDirection = resolveDirection();\n elem.dataset.dropdownAlign = resolveAlign();\n menu.showPopover();\n requestAnimationFrame(() => positionPopoverMenu());\n };\n\n const closeMenu = () => {\n if (!isPopoverOpen()) return;\n menu.hidePopover();\n };\n\n const toggleMenu = () => {\n if (isPopoverOpen()) {\n closeMenu();\n } else {\n openMenu();\n }\n };\n\n syncClosedState();\n\n menu.addEventListener(\"click\", (event) => {\n const target =\n event.target instanceof Element ? event.target : event.target?.parentElement;\n if (!target) return;\n if (!target.closest(\"[data-dropdown-close]\")) return;\n closeMenu();\n });\n\n trigger?.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n toggleMenu();\n });\n\n elem.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n closeMenu();\n trigger?.focus();\n }\n });\n}\n\nfunction enhanceToggle(elem) {\n if (elem.dataset.enhancedToggle) return;\n elem.dataset.enhancedToggle = \"true\";\n const checkbox = elem.querySelector('input[type=\"checkbox\"]');\n if (!checkbox) return;\n\n if (!elem.hasAttribute(\"tabindex\")) {\n elem.setAttribute(\"tabindex\", \"0\");\n }\n\n elem.setAttribute(\"role\", \"switch\");\n elem.setAttribute(\"aria-checked\", checkbox.checked ? \"true\" : \"false\");\n\n const toggleSwitch = document.createElement(\"span\");\n toggleSwitch.className = \"toggle-switch\";\n toggleSwitch.setAttribute(\"role\", \"presentation\");\n toggleSwitch.setAttribute(\"aria-hidden\", \"true\");\n const knob = document.createElement(\"span\");\n knob.className = \"toggle-knob\";\n toggleSwitch.appendChild(knob);\n elem.insertBefore(toggleSwitch, checkbox.nextSibling);\n\n const updateAria = () => {\n elem.setAttribute(\"aria-checked\", checkbox.checked ? \"true\" : \"false\");\n };\n\n const toggle = () => {\n if (checkbox.disabled) return;\n checkbox.checked = !checkbox.checked;\n updateAria();\n checkbox.dispatchEvent(new Event(\"input\", { bubbles: true }));\n checkbox.dispatchEvent(new Event(\"change\", { bubbles: true }));\n };\n\n elem.addEventListener(\"click\", (event) => {\n event.preventDefault();\n toggle();\n });\n\n elem.addEventListener(\"keydown\", (event) => {\n if (event.key === \" \" || event.key === \"Enter\") {\n event.preventDefault();\n toggle();\n }\n });\n\n checkbox.addEventListener(\"change\", updateAria);\n}\n\nfunction enhanceColorInput(elem) {\n if (elem.dataset.enhancedColorInput) return;\n\n const input = elem.querySelector('input[type=\"color\"]');\n if (!input) return;\n\n elem.dataset.enhancedColorInput = \"true\";\n\n let control = elem.querySelector(':scope > .color-control');\n let swatch = elem.querySelector(':scope > .color-control > .color-swatch');\n let output = elem.querySelector(':scope > .color-control > output');\n\n if (!control) {\n control = document.createElement(\"span\");\n control.className = \"color-control\";\n input.before(control);\n }\n\n if (!swatch) {\n swatch = document.createElement(\"span\");\n swatch.className = \"color-swatch\";\n control.appendChild(swatch);\n }\n\n if (input.parentElement !== swatch) {\n swatch.appendChild(input);\n }\n\n if (!output) {\n output = document.createElement(\"output\");\n control.appendChild(output);\n }\n\n const sync = () => {\n const isUnset = input.dataset.colorUnset === \"1\";\n\n if (isUnset) {\n output.value = \"\";\n output.textContent = msg(\"not set\");\n control.dataset.value = \"\";\n control.dataset.unset = \"1\";\n swatch.dataset.unset = \"1\";\n return;\n }\n\n output.value = input.value;\n output.textContent = input.value;\n control.dataset.value = input.value;\n delete control.dataset.unset;\n delete swatch.dataset.unset;\n };\n\n sync();\n\n const setResolved = () => {\n if (input.dataset.colorUnset === \"1\") {\n input.dataset.colorUnset = \"0\";\n }\n sync();\n };\n\n input.addEventListener(\"input\", setResolved, { passive: true });\n input.addEventListener(\"change\", setResolved, { passive: true });\n}\n\nfunction enhanceRange(elem) {\n if (elem.dataset.enhancedRange) return;\n\n const wireProgrammaticUpdates = (updateFn) => {\n if (elem.dataset.enhancedRangeProgrammatic) return;\n elem.dataset.enhancedRangeProgrammatic = \"1\";\n\n const descriptor =\n Object.getOwnPropertyDescriptor(Object.getPrototypeOf(elem), \"value\") ||\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, \"value\");\n\n if (descriptor?.get && descriptor?.set) {\n Object.defineProperty(elem, \"value\", {\n configurable: true,\n enumerable: descriptor.enumerable,\n get() {\n return descriptor.get.call(this);\n },\n set(nextValue) {\n descriptor.set.call(this, nextValue);\n updateFn();\n },\n });\n }\n\n const attrObserver = new MutationObserver((mutations) => {\n const shouldUpdate = mutations.some((mutation) => {\n const attr = mutation.attributeName;\n return attr === \"value\" || attr === \"min\" || attr === \"max\";\n });\n if (shouldUpdate) updateFn();\n });\n attrObserver.observe(elem, {\n attributes: true,\n attributeFilter: [\"value\", \"min\", \"max\"],\n });\n };\n\n const label = elem.closest(\"label\");\n const hasRangeOutputClass = label?.classList.contains(\"range-output\");\n\n const inputId =\n elem.id || `range-${Math.random().toString(36).substring(2, 11)}`;\n const outputId = `${inputId}-output`;\n elem.id = inputId;\n\n if (hasRangeOutputClass) {\n const labelSpan = label.querySelector(\"span\");\n if (labelSpan && !labelSpan.classList.contains(\"range-output-wrapper\")) {\n const explicitRangeLabel =\n labelSpan.getAttribute(\"data-range-label\") ||\n label.getAttribute(\"data-range-label\") ||\n \"\";\n\n const wrapper = document.createElement(\"span\");\n wrapper.className = \"range-output-wrapper\";\n wrapper.style.display = \"flex\";\n wrapper.style.justifyContent = \"space-between\";\n wrapper.style.alignItems = \"center\";\n\n const textSpan = document.createElement(\"span\");\n textSpan.textContent = explicitRangeLabel || labelSpan.textContent;\n wrapper.appendChild(textSpan);\n\n const output = document.createElement(\"output\");\n output.id = outputId;\n output.setAttribute(\"for\", inputId);\n output.style.color =\n \"var(--surface-text-secondary, var(--color-text-secondary))\";\n output.style.fontSize = \"0.875rem\";\n output.textContent = elem.value;\n wrapper.appendChild(output);\n\n labelSpan.textContent = \"\";\n labelSpan.appendChild(wrapper);\n\n const updateOutput = () => {\n output.textContent = elem.value;\n };\n elem.addEventListener(\"input\", updateOutput);\n elem.addEventListener(\"change\", updateOutput);\n wireProgrammaticUpdates(updateOutput);\n updateOutput();\n }\n } else {\n let container = elem.closest(\".range-container\");\n if (!container) {\n container = document.createElement(\"div\");\n container.className = \"range-container\";\n elem.parentNode?.insertBefore(container, elem);\n container.appendChild(elem);\n }\n container.style.position = \"relative\";\n\n const bubble = document.createElement(\"output\");\n bubble.id = outputId;\n bubble.setAttribute(\"for\", inputId);\n bubble.className = \"range-bubble\";\n bubble.setAttribute(\"aria-live\", \"polite\");\n container.appendChild(bubble);\n\n const updateBubble = () => {\n const min = parseFloat(elem.min) || 0;\n const max = parseFloat(elem.max) || 100;\n const value = parseFloat(elem.value);\n const pct = (value - min) / (max - min);\n bubble.style.left = `calc(${pct * 100}% )`;\n bubble.textContent = String(value);\n };\n const show = () => bubble.classList.add(\"visible\");\n const hide = () => bubble.classList.remove(\"visible\");\n elem.addEventListener(\"input\", updateBubble);\n elem.addEventListener(\"pointerdown\", show);\n elem.addEventListener(\"pointerup\", hide);\n elem.addEventListener(\"pointerleave\", hide);\n elem.addEventListener(\"focus\", show);\n elem.addEventListener(\"blur\", hide);\n elem.addEventListener(\"change\", updateBubble);\n wireProgrammaticUpdates(updateBubble);\n updateBubble();\n }\n\n elem.dataset.enhancedRange = \"1\";\n}\n\nfunction enhanceRequired(elem) {\n if (elem.dataset.enhancedRequired) return;\n elem.dataset.enhancedRequired = \"true\";\n\n const enhanceRequiredField = (input) => {\n let label;\n if (input.closest(\"[role$=group]\")) {\n // Handles both radiogroup and group\n label = input.closest(\"[role$=group]\").querySelector(\"legend\");\n } else {\n label = input.closest(\"label\");\n }\n if (!label) return;\n\n if (label.querySelector(\".required-asterisk\")) return;\n\n const asterisk = document.createElement(\"span\");\n asterisk.classList.add(\"required-asterisk\");\n asterisk.textContent = \"*\";\n asterisk.style.marginLeft = \"4px\";\n\n const labelText = label.querySelector(\"span, [data-label]\");\n if (labelText) {\n labelText.appendChild(asterisk);\n } else {\n const field = label.querySelector(\"input, select, textarea\");\n if (field) {\n label.insertBefore(asterisk, field);\n } else {\n label.appendChild(asterisk);\n }\n }\n\n const form = input.closest(\"form\");\n if (form && !form.querySelector(\".required-legend\")) {\n const legend = document.createElement(\"small\");\n legend.classList.add(\"required-legend\");\n legend.textContent = msg(\"* Required fields\");\n form.insertBefore(\n legend,\n form.querySelector(\".form-actions\") || form.lastElementChild,\n );\n }\n };\n\n elem.querySelectorAll(\"[required]\").forEach((input) => {\n enhanceRequiredField(input);\n });\n}\n\nfunction enhanceOpenGroup(elem) {\n if (elem.dataset.enhancedOpenGroup) return;\n elem.dataset.enhancedOpenGroup = \"true\";\n\n elem.classList.add(\"flex\", \"flex-wrap\", \"buttons\");\n\n const addInput = document.createElement(\"input\");\n addInput.type = \"text\";\n addInput.placeholder = msg(\"Add item...\");\n addInput.classList.add(\"input-text\", \"input-sm\");\n addInput.style.width = \"auto\";\n\n const getFirstInput = () =>\n elem.querySelector('input[type=\"radio\"], input[type=\"checkbox\"]');\n\n elem.appendChild(addInput);\n addInput.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\" || event.key === \"Tab\") {\n const value = addInput.value.trim();\n if (value) {\n event.preventDefault();\n\n const firstInput = getFirstInput();\n const type = firstInput?.type === \"radio\" ? \"radio\" : \"checkbox\";\n const id = `open-group-${Math.random().toString(36).substring(2, 11)}`;\n const label = document.createElement(\"label\");\n\n const span = document.createElement(\"span\");\n span.setAttribute(\"data-label\", \"\");\n span.textContent = value;\n\n const input = document.createElement(\"input\");\n input.type = type;\n input.name =\n firstInput?.name || elem.getAttribute(\"data-name\") || \"open-group\";\n input.value = value;\n input.id = id;\n\n label.appendChild(span);\n label.appendChild(input);\n\n elem.insertBefore(label, addInput);\n addInput.value = \"\";\n }\n } else if (event.key === \"Backspace\" && addInput.value === \"\") {\n event.preventDefault();\n const labels = elem.querySelectorAll(\"label\");\n if (labels.length > 0) {\n const lastLabel = labels[labels.length - 1];\n lastLabel.remove();\n }\n }\n });\n}\n\nfunction enhanceClip(elem) {\n if (elem.dataset.enhancedClip) return;\n elem.dataset.enhancedClip = \"true\";\n\n if (!elem.hasAttribute(\"tabindex\")) {\n elem.setAttribute(\"tabindex\", \"0\");\n }\n if (!elem.hasAttribute(\"role\")) {\n elem.setAttribute(\"role\", \"button\");\n }\n\n const syncAria = () => {\n const isOpen = elem.getAttribute(\"data-clip-open\") === \"true\";\n elem.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n };\n\n const toggleOpen = () => {\n const isOpen = elem.getAttribute(\"data-clip-open\") === \"true\";\n elem.setAttribute(\"data-clip-open\", isOpen ? \"false\" : \"true\");\n syncAria();\n };\n\n elem.addEventListener(\"click\", (event) => {\n if (event.defaultPrevented) return;\n toggleOpen();\n });\n\n elem.addEventListener(\"keydown\", (event) => {\n if (event.key === \" \" || event.key === \"Enter\") {\n event.preventDefault();\n toggleOpen();\n }\n });\n\n syncAria();\n}\n\nfunction enhanceButtonWorking(elem) {\n if (elem.dataset.enhancedBtnWorking) return;\n elem.dataset.enhancedBtnWorking = \"true\";\n\n let originalIcon = null;\n let addedIcon = false;\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === \"class\") {\n const hasWorking = elem.classList.contains(\"btn-working\");\n const icon = elem.querySelector(\"pds-icon\");\n\n if (hasWorking) {\n if (icon) {\n if (!originalIcon) {\n originalIcon = icon.getAttribute(\"icon\");\n }\n icon.setAttribute(\"icon\", \"circle-notch\");\n } else {\n const newIcon = document.createElement(\"pds-icon\");\n newIcon.setAttribute(\"icon\", \"circle-notch\");\n newIcon.setAttribute(\"size\", \"sm\");\n elem.insertBefore(newIcon, elem.firstChild);\n addedIcon = true;\n }\n } else if (mutation.oldValue?.includes(\"btn-working\")) {\n if (icon) {\n if (addedIcon) {\n icon.remove();\n addedIcon = false;\n } else if (originalIcon) {\n icon.setAttribute(\"icon\", originalIcon);\n originalIcon = null;\n }\n }\n }\n }\n });\n });\n\n observer.observe(elem, {\n attributes: true,\n attributeFilter: [\"class\"],\n attributeOldValue: true,\n });\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\n// Map selectors to their run functions\nconst enhancerRunners = new Map([\n [\".accordion\", enhanceAccordion],\n [\"nav[data-dropdown]\", enhanceDropdown],\n [\"label[data-toggle]\", enhanceToggle],\n [\"label[data-color]\", enhanceColorInput],\n ['input[type=\"range\"]', enhanceRange],\n [\"form[data-required]\", enhanceRequired],\n [\"fieldset[role=group][data-open]\", enhanceOpenGroup],\n [\"[data-clip]\", enhanceClip],\n [\"button, a[class*='btn-']\", enhanceButtonWorking],\n]);\n\n/**\n * Complete enhancers with runtime functions.\n * Used by PDS.enhancer() and AutoDefiner at runtime.\n *\n * This is the canonical runtime array of enhancer objects.\n */\nexport const defaultPDSEnhancers = enhancerDefinitions.map((meta) => ({\n ...meta,\n run: enhancerRunners.get(meta.selector) || (() => {}),\n}));\n\n// Metadata lives in pds-enhancers-meta.js (live-mode only).\n", "/**\r\n * PDS Enhancer Metadata (live mode only)\r\n *\r\n * This file contains description and demoHtml for runtime inspection tools.\r\n * It is intentionally kept separate from pds-enhancers.js to keep the\r\n * production pds.js bundle lean.\r\n */\r\n\r\nexport const defaultPDSEnhancerMetadata = [\r\n {\r\n selector: \".accordion\",\r\n description:\r\n \"Ensures only one <details> element can be open at a time within the accordion.\",\r\n demoHtml: `\r\n <div class=\"accordion\">\r\n <details>\r\n <summary>Section 1</summary>\r\n <p>Content for section 1</p>\r\n </details>\r\n <details>\r\n <summary>Section 2</summary>\r\n <p>Content for section 2</p>\r\n </details>\r\n <details>\r\n <summary>Section 3</summary>\r\n <p>Content for section 3</p>\r\n </details>\r\n </div>\r\n `.trim(),\r\n },\r\n {\r\n selector: \"nav[data-dropdown]\",\r\n description:\r\n \"Enhances a nav element with data-dropdown to toggle its last child as a dropdown panel (menu, card, form, etc.). Add data-dropdown-close to any clickable descendant that should close the menu on selection.\",\r\n attributes: [\r\n {\r\n name: \"data-dropdown-close\",\r\n description:\r\n \"When clicked (or when a descendant is clicked), closes the currently open dropdown popover.\",\r\n appliesTo: \"Any clickable element inside nav[data-dropdown] menu/panel content\",\r\n },\r\n ],\r\n demoHtml: `\r\n <nav data-dropdown>\r\n <button class=\"btn-primary\">Menu</button>\r\n <menu>\r\n <li><a href=\"#open\">Open</a></li>\r\n <li><a href=\"#settings\" data-dropdown-close>Open settings and close</a></li>\r\n </menu>\r\n </nav>\r\n `.trim(),\r\n },\r\n {\r\n selector: \"label[data-toggle]\",\r\n description: \"Creates a toggle switch element from a checkbox.\",\r\n demoHtml: `\r\n <label data-toggle>\r\n <input type=\"checkbox\">\r\n <span data-label>Enable notifications</span>\r\n </label>\r\n `.trim(),\r\n },\r\n {\r\n selector: \"label[data-color]\",\r\n description:\r\n \"Wraps color inputs with a styled control shell and synced hex output while keeping the native picker.\",\r\n demoHtml: `\r\n <label data-color>\r\n <span>Brand color</span>\r\n <input type=\"color\" value=\"#7c3aed\">\r\n </label>\r\n `.trim(),\r\n },\r\n {\r\n selector: 'input[type=\"range\"]',\r\n description: \"Enhances range inputs with an attached <output>.\",\r\n demoHtml: `\r\n <label class=\"range-output\">\r\n <span data-label>Volume</span>\r\n <input type=\"range\" min=\"0\" max=\"100\" value=\"40\">\r\n </label>\r\n `.trim(),\r\n },\r\n {\r\n selector: \"form[data-required]\",\r\n description:\r\n \"Enhances required form fields using an asterisk in the label.\",\r\n demoHtml: `\r\n <form data-required action=\"#\" method=\"post\">\r\n <label>\r\n <span>Field Label</span>\r\n <input type=\"text\" required>\r\n </label>\r\n <nav class=\"form-actions\">\r\n <button type=\"submit\" class=\"btn-primary\">Submit</button>\r\n </nav>\r\n </form>\r\n `.trim(),\r\n },\r\n {\r\n selector: \"fieldset[role=group][data-open]\",\r\n description:\r\n \"Enhances a checkbox/radio group to be open (have a way to add and remove items).\",\r\n demoHtml: `\r\n <fieldset role=\"group\" data-open>\r\n <label>\r\n <span data-label>Test</span>\r\n <input value=\"lala\" name=\"test1\" type=\"radio\" />\r\n </label>\r\n </fieldset>\r\n `.trim(),\r\n },\r\n {\r\n selector: \"[data-clip]\",\r\n description:\r\n \"Enables click/keyboard toggling for line-clamped content blocks.\",\r\n demoHtml: `\r\n <div data-clip=\"2\" data-clip-more=\"more...\">\r\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>\r\n <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.</p>\r\n <p>Duis aute irure dolor in reprehenderit in voluptate velit esse.</p>\r\n </div>\r\n `.trim(),\r\n },\r\n {\r\n selector: \"button, a[class*='btn-']\",\r\n description:\r\n \"Automatically manages spinner icon for buttons with .btn-working class\",\r\n demoHtml: `\r\n <button class=\"btn-primary btn-working\">\r\n <span>Saving</span>\r\n </button>\r\n `.trim(),\r\n },\r\n];\r\n", "const DEFAULT_SEGMENT = \"pds\";\nconst URL_PATTERN = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\nconst DRIVE_PATTERN = /^[a-z]:/i;\n\nfunction ensureTrailingSlash(value = \"\") {\n return value.endsWith(\"/\") ? value : `${value}/`;\n}\n\nfunction appendSegmentIfMissing(input = \"\", segment = DEFAULT_SEGMENT) {\n const trimmed = input.replace(/\\/+$/, \"\");\n const regex = new RegExp(`(?:^|\\/)${segment}$`, \"i\");\n if (regex.test(trimmed)) {\n return trimmed;\n }\n return `${trimmed}/${segment}`;\n}\n\nfunction stripLeadingDotSlash(value) {\n return value.replace(/^\\.\\/+/, \"\");\n}\n\nfunction stripDriveLetter(value) {\n if (DRIVE_PATTERN.test(value)) {\n return value.replace(DRIVE_PATTERN, \"\").replace(/^\\/+/, \"\");\n }\n return value;\n}\n\nfunction stripPublicPrefix(value) {\n if (value.startsWith(\"public/\")) {\n return value.substring(\"public/\".length);\n }\n return value;\n}\n\n/**\n * Resolve the public asset root URL for PDS static assets based on the consumer config.\n * Falls back to \"/assets/pds/\" when no root is provided. Automatically appends the\n * \"pds\" segment when the provided root omits it.\n *\n * @param {object} config - Unified PDS configuration.\n * @param {{ defaultRoot?: string, segment?: string }} [options]\n * @returns {string} Normalized URL (always ends with a trailing slash).\n */\nexport function resolvePublicAssetURL(config, options = {}) {\n const segment = options.segment || DEFAULT_SEGMENT;\n const defaultRoot = options.defaultRoot || `/assets/${segment}/`;\n const candidate =\n (config?.public && config.public?.root) ||\n (config?.static && config.static?.root) ||\n null;\n\n if (!candidate || typeof candidate !== \"string\") {\n return ensureTrailingSlash(defaultRoot);\n }\n\n let normalized = candidate.trim();\n if (!normalized) {\n return ensureTrailingSlash(defaultRoot);\n }\n\n normalized = normalized.replace(/\\\\/g, \"/\");\n normalized = appendSegmentIfMissing(normalized, segment);\n normalized = ensureTrailingSlash(normalized);\n\n if (URL_PATTERN.test(normalized)) {\n return normalized;\n }\n\n normalized = stripLeadingDotSlash(normalized);\n normalized = stripDriveLetter(normalized);\n\n if (normalized.startsWith(\"/\")) {\n return ensureTrailingSlash(normalized);\n }\n\n normalized = stripPublicPrefix(normalized);\n\n if (!normalized.startsWith(\"/\")) {\n normalized = `/${normalized}`;\n }\n\n normalized = normalized.replace(/\\/+/g, (match, offset) =>\n offset === 0 ? match : \"/\"\n );\n\n return ensureTrailingSlash(normalized);\n}\n\n/**\n * Extract the raw public root candidate from config for reuse in Node-side helpers.\n * @param {object} config\n * @returns {string|null}\n */\nexport function getPublicRootCandidate(config) {\n if (config?.public?.root) return config.public.root;\n if (config?.static?.root) return config.static.root;\n return null;\n}\n\nexport const __internal = {\n ensureTrailingSlash,\n appendSegmentIfMissing,\n stripLeadingDotSlash,\n stripDriveLetter,\n stripPublicPrefix,\n URL_PATTERN,\n DEFAULT_SEGMENT,\n};\n", "/**\n * Font Loading Utility\n * Automatically loads fonts from Google Fonts when they're not available in the browser\n */\n\nimport { PDS } from \"../pds-singleton.js\";\n\n/**\n * Checks if a font is available in the browser\n * @param {string} fontName - The name of the font to check\n * @returns {boolean} True if the font is available\n */\nfunction isFontAvailable(fontName) {\n // Clean up font name (remove quotes and extra spacing)\n const cleanName = fontName.replace(/['\"]/g, '').trim();\n \n // System fonts that are always available\n const systemFonts = [\n 'system-ui',\n '-apple-system',\n 'sans-serif',\n 'serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'ui-sans-serif',\n 'ui-serif',\n 'ui-monospace',\n 'ui-rounded'\n ];\n \n if (systemFonts.includes(cleanName.toLowerCase())) {\n return true;\n }\n \n // Use canvas-based detection\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n \n if (!context) return false;\n \n const testString = 'mmmmmmmmmmlli'; // Characters with varying widths\n const testSize = '72px';\n const baselineFont = 'monospace';\n \n // Measure with baseline font\n context.font = `${testSize} ${baselineFont}`;\n const baselineWidth = context.measureText(testString).width;\n \n // Measure with test font\n context.font = `${testSize} \"${cleanName}\", ${baselineFont}`;\n const testWidth = context.measureText(testString).width;\n \n return baselineWidth !== testWidth;\n}\n\n/**\n * Extracts the primary font name from a font-family string\n * @param {string} fontFamily - Font family string (e.g., \"Roboto, sans-serif\")\n * @returns {string} The primary font name\n */\nfunction extractPrimaryFont(fontFamily) {\n if (!fontFamily) return null;\n \n // Split by comma and get first font\n const fonts = fontFamily.split(',').map(f => f.trim());\n const primaryFont = fonts[0];\n \n // Remove quotes\n return primaryFont.replace(/['\"]/g, '').trim();\n}\n\n/**\n * Loads a Google Font dynamically\n * @param {string} fontFamily - The font family to load (can be comma-separated list)\n * @param {Object} options - Loading options\n * @param {number[]} options.weights - Font weights to load (default: [400, 500, 600, 700])\n * @param {boolean} options.italic - Whether to include italic variants (default: false)\n * @returns {Promise<void>}\n */\nexport async function loadGoogleFont(fontFamily, options = {}) {\n if (!fontFamily) {\n return Promise.resolve();\n }\n \n const {\n weights = [400, 500, 600, 700],\n italic = false\n } = options;\n \n const primaryFont = extractPrimaryFont(fontFamily);\n \n if (!primaryFont) {\n return Promise.resolve();\n }\n \n // Check if font is already available\n if (isFontAvailable(primaryFont)) {\n return Promise.resolve();\n }\n \n // Check if font link already exists\n const encodedFont = encodeURIComponent(primaryFont);\n const existingLink = document.querySelector(\n `link[href*=\"fonts.googleapis.com\"][href*=\"${encodedFont}\"]`\n );\n \n if (existingLink) {\n PDS.log(\"log\", `Font \"${primaryFont}\" is already loading or loaded`);\n return Promise.resolve();\n }\n \n PDS.log(\"log\", `Loading font \"${primaryFont}\" from Google Fonts...`);\n \n return new Promise((resolve, reject) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n \n // Build Google Fonts URL with specified weights\n const weightsParam = italic \n ? `ital,wght@0,${weights.join(';0,')};1,${weights.join(';1,')}`\n : `wght@${weights.join(';')}`;\n \n link.href = `https://fonts.googleapis.com/css2?family=${encodedFont}:${weightsParam}&display=swap`;\n \n // Add a data attribute for easy identification\n link.setAttribute('data-font-loader', primaryFont);\n \n link.onload = () => {\n PDS.log(\"log\", `Successfully loaded font \"${primaryFont}\"`);\n resolve();\n };\n \n link.onerror = () => {\n PDS.log(\"warn\", `Failed to load font \"${primaryFont}\" from Google Fonts`);\n reject(new Error(`Failed to load font: ${primaryFont}`));\n };\n \n document.head.appendChild(link);\n \n // Set a timeout to prevent hanging indefinitely\n setTimeout(() => {\n if (!isFontAvailable(primaryFont)) {\n PDS.log(\"warn\", `Font \"${primaryFont}\" did not load within timeout`);\n }\n resolve(); // Resolve anyway to not block the application\n }, 5000);\n });\n}\n\n/**\n * Loads fonts for all font families in a typography config\n * @param {Object} typographyConfig - Typography configuration object\n * @returns {Promise<void>}\n */\nexport async function loadTypographyFonts(typographyConfig) {\n if (!typographyConfig) {\n return Promise.resolve();\n }\n \n const fontFamilies = new Set();\n \n // Collect all font families from the config\n if (typographyConfig.fontFamilyHeadings) {\n fontFamilies.add(typographyConfig.fontFamilyHeadings);\n }\n if (typographyConfig.fontFamilyBody) {\n fontFamilies.add(typographyConfig.fontFamilyBody);\n }\n if (typographyConfig.fontFamilyMono) {\n fontFamilies.add(typographyConfig.fontFamilyMono);\n }\n \n // Load all fonts in parallel\n const loadPromises = Array.from(fontFamilies).map(fontFamily => \n loadGoogleFont(fontFamily).catch(err => {\n PDS.log(\"warn\", `Could not load font: ${fontFamily}`, err);\n // Don't fail the whole operation if one font fails\n })\n );\n \n await Promise.all(loadPromises);\n}\n\n/**\n * Removes previously loaded Google Fonts\n * @param {string} fontName - Optional font name to remove. If not specified, removes all.\n */\nexport function unloadGoogleFont(fontName = null) {\n const selector = fontName \n ? `link[data-font-loader=\"${fontName}\"]`\n : 'link[data-font-loader]';\n \n const links = document.querySelectorAll(selector);\n links.forEach(link => link.remove());\n \n if (fontName) {\n PDS.log(\"log\", `Unloaded font \"${fontName}\"`);\n } else {\n PDS.log(\"log\", `Unloaded ${links.length} font(s)`);\n }\n}\n", "/**\r\n * Dynamically load and (idempotently) define a set of web components by tag name.\r\n */\r\nasync function defineWebComponents(...args) {\r\n let opts = {};\r\n if (args.length && typeof args[args.length - 1] === \"object\") {\r\n opts = args.pop() || {};\r\n }\r\n const tags = args;\r\n\r\n const {\r\n baseURL,\r\n mapper = (tag) => `${tag}.js`,\r\n onError = (tag, err) => console.error(`[defineWebComponents] ${tag}:`, err),\r\n } = opts;\r\n\r\n const base = baseURL\r\n ? new URL(\r\n baseURL,\r\n typeof location !== \"undefined\" ? location.href : import.meta.url\r\n )\r\n : new URL(\"./\", import.meta.url);\r\n\r\n const toPascal = (tag) =>\r\n tag.toLowerCase().replace(/(^|-)([a-z])/g, (_, __, c) => c.toUpperCase());\r\n\r\n const loadOne = async (tag) => {\r\n try {\r\n if (customElements.get(tag)) return { tag, status: \"already-defined\" };\r\n\r\n // Allow mapper to return either a string (path) or a URL instance\r\n const spec = mapper(tag);\r\n const href = spec instanceof URL ? spec.href : new URL(spec, base).href;\r\n const mod = await import(href);\r\n const Named = mod?.default ?? mod?.[toPascal(tag)];\r\n\r\n if (!Named) {\r\n if (customElements.get(tag)) return { tag, status: \"self-defined\" };\r\n throw new Error(\r\n `No export found for ${tag}. Expected default export or named export \"${toPascal(\r\n tag\r\n )}\".`\r\n );\r\n }\r\n\r\n if (!customElements.get(tag)) {\r\n customElements.define(tag, Named);\r\n return { tag, status: \"defined\" };\r\n }\r\n return { tag, status: \"race-already-defined\" };\r\n } catch (err) {\r\n onError(tag, err);\r\n throw err;\r\n }\r\n };\r\n\r\n return Promise.all(tags.map(loadOne));\r\n}\r\n\r\n/**\r\n * Auto-definer that also works inside open Shadow DOM.\r\n * Automatically defines unknown custom elements (tags with a dash)\r\n * and attach progressive enhancers to given selectors.\r\n *\r\n * Options:\r\n * baseURL: string | URL\r\n * mapper: (tag) => string\r\n * onError: (tag, err) => void\r\n * predicate: (tag, el) => boolean\r\n * attributeModule: string = \"data-module\"\r\n * root: Node = document\r\n * scanExisting: boolean = true\r\n * debounceMs: number = 16\r\n * observeShadows: boolean = true\r\n * enhancers: Array<{selector: string, run: (elem: Element) => void}> = []\r\n * patchAttachShadow: boolean = true\r\n * mapper: (tag) => string | URL\r\n *\r\n * Returns: { stop(): void, flush(): Promise<void> }\r\n */\r\nexport class AutoDefiner {\r\n constructor(options = {}) {\r\n const {\r\n baseURL,\r\n mapper,\r\n onError,\r\n predicate = () => true,\r\n attributeModule = \"data-module\",\r\n root = document,\r\n scanExisting = true,\r\n debounceMs = 16,\r\n observeShadows = true,\r\n enhancers = [], // [{String selector, Function run(elem)}]\r\n patchAttachShadow = true,\r\n } = options;\r\n\r\n const pending = new Set(); // tags queued for definition\r\n const inFlight = new Set(); // tags currently importing\r\n const knownMissing = new Set(); // tags that failed before\r\n const perTagModulePath = new Map(); // tag -> explicit module path (from data-module)\r\n const shadowObservers = new WeakMap(); // ShadowRoot -> MutationObserver\r\n const enhancerApplied = new WeakMap(); // element -> Set of applied enhancer selectors\r\n let timer = 0;\r\n let stopped = false;\r\n let restoreAttachShadow = null;\r\n\r\n const applyEnhancers = (element) => {\r\n // Skip if no enhancers provided\r\n if (!element || !enhancers.length) return;\r\n\r\n // Get or create the set of applied enhancers for this element\r\n let appliedEnhancers = enhancerApplied.get(element);\r\n if (!appliedEnhancers) {\r\n appliedEnhancers = new Set();\r\n enhancerApplied.set(element, appliedEnhancers);\r\n }\r\n\r\n // Check each enhancer\r\n for (const enhancer of enhancers) {\r\n if (!enhancer.selector || !enhancer.run) continue;\r\n\r\n // Skip if this enhancer was already applied to this element\r\n if (appliedEnhancers.has(enhancer.selector)) continue;\r\n\r\n try {\r\n // Check if element matches the selector\r\n if (element.matches && element.matches(enhancer.selector)) {\r\n enhancer.run(element);\r\n // Mark this enhancer as applied to this element\r\n appliedEnhancers.add(enhancer.selector);\r\n }\r\n } catch (err) {\r\n console.warn(\r\n `[AutoDefiner] Error applying enhancer for selector \"${enhancer.selector}\":`,\r\n err\r\n );\r\n }\r\n }\r\n };\r\n\r\n const queueTag = (tag, el /* optional */) => {\r\n if (stopped) return;\r\n if (!tag || !tag.includes(\"-\")) return;\r\n if (customElements.get(tag)) return;\r\n if (inFlight.has(tag)) return;\r\n if (knownMissing.has(tag)) return;\r\n\r\n // Capture per-instance module override from the element itself (works in shadow DOM)\r\n if (el && el.getAttribute) {\r\n const override = el.getAttribute(attributeModule);\r\n if (override && !perTagModulePath.has(tag)) {\r\n perTagModulePath.set(tag, override);\r\n }\r\n }\r\n\r\n pending.add(tag);\r\n schedule();\r\n };\r\n\r\n const schedule = () => {\r\n if (timer) return;\r\n timer = setTimeout(flush, debounceMs);\r\n };\r\n\r\n const crawlTree = (rootNode) => {\r\n // rootNode can be Document, Element, ShadowRoot\r\n if (!rootNode) return;\r\n\r\n // Process the root node if it's an element\r\n if (rootNode.nodeType === 1) {\r\n const el = /** @type {Element} */ (rootNode);\r\n const tag = el.tagName?.toLowerCase();\r\n if (\r\n tag &&\r\n tag.includes(\"-\") &&\r\n !customElements.get(tag) &&\r\n predicate(tag, el)\r\n ) {\r\n queueTag(tag, el);\r\n }\r\n\r\n // Apply enhancers to this element\r\n applyEnhancers(el);\r\n\r\n // Observe/open shadow roots we encounter\r\n if (observeShadows && el.shadowRoot) {\r\n observeShadowRoot(el.shadowRoot);\r\n }\r\n }\r\n\r\n // Process all descendant elements (but not the root node again)\r\n if (rootNode.querySelectorAll) {\r\n rootNode.querySelectorAll(\"*\").forEach((e) => {\r\n const t = e.tagName?.toLowerCase();\r\n if (\r\n t &&\r\n t.includes(\"-\") &&\r\n !customElements.get(t) &&\r\n predicate(t, e)\r\n ) {\r\n queueTag(t, e);\r\n }\r\n\r\n // Apply enhancers to descendant elements\r\n applyEnhancers(e);\r\n\r\n if (observeShadows && e.shadowRoot) {\r\n observeShadowRoot(e.shadowRoot);\r\n }\r\n });\r\n }\r\n };\r\n\r\n const observeShadowRoot = (sr) => {\r\n if (!sr || shadowObservers.has(sr)) return;\r\n // Initial scan inside this shadow\r\n crawlTree(sr);\r\n\r\n const mo = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n m.addedNodes?.forEach((n) => {\r\n crawlTree(n);\r\n });\r\n if (m.type === \"attributes\" && m.target) {\r\n crawlTree(m.target);\r\n }\r\n }\r\n });\r\n mo.observe(sr, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\r\n attributeModule,\r\n ...enhancers\r\n .map((e) => e.selector)\r\n .filter((s) => s.startsWith(\"data-\")),\r\n ],\r\n });\r\n shadowObservers.set(sr, mo);\r\n };\r\n\r\n async function flush() {\r\n clearTimeout(timer);\r\n timer = 0;\r\n if (!pending.size) return;\r\n\r\n const tags = Array.from(pending);\r\n pending.clear();\r\n tags.forEach((t) => inFlight.add(t));\r\n\r\n try {\r\n const effectiveMapper = (tag) =>\r\n perTagModulePath.get(tag) ?? (mapper ? mapper(tag) : `${tag}.js`);\r\n\r\n await defineWebComponents(...tags, {\r\n baseURL,\r\n mapper: effectiveMapper,\r\n onError: (tag, err) => {\r\n knownMissing.add(tag);\r\n onError?.(tag, err);\r\n },\r\n });\r\n } catch {\r\n // errors per tag recorded via onError\r\n } finally {\r\n tags.forEach((t) => inFlight.delete(t));\r\n }\r\n }\r\n\r\n // Root observer (document or provided root)\r\n const mountNode = root === document ? document.documentElement : root;\r\n const obs = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n m.addedNodes?.forEach((n) => {\r\n crawlTree(n);\r\n });\r\n if (m.type === \"attributes\" && m.target) {\r\n crawlTree(m.target);\r\n }\r\n }\r\n });\r\n obs.observe(mountNode, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\r\n attributeModule,\r\n ...enhancers\r\n .map((e) => e.selector)\r\n .filter((s) => s.startsWith(\"data-\")),\r\n ],\r\n });\r\n\r\n // Patch attachShadow to auto-observe newly created open shadows\r\n if (observeShadows && patchAttachShadow && Element.prototype.attachShadow) {\r\n const orig = Element.prototype.attachShadow;\r\n Element.prototype.attachShadow = function patchedAttachShadow(init) {\r\n const sr = orig.call(this, init);\r\n if (init && init.mode === \"open\") {\r\n observeShadowRoot(sr);\r\n // queue potential unknown host tag too\r\n const tag = this.tagName?.toLowerCase();\r\n if (tag && tag.includes(\"-\") && !customElements.get(tag)) {\r\n queueTag(tag, this);\r\n }\r\n }\r\n return sr;\r\n };\r\n restoreAttachShadow = () => (Element.prototype.attachShadow = orig);\r\n }\r\n\r\n // Initial scan\r\n if (scanExisting) {\r\n crawlTree(mountNode);\r\n }\r\n\r\n return {\r\n stop() {\r\n stopped = true;\r\n obs.disconnect();\r\n if (restoreAttachShadow) restoreAttachShadow();\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = 0;\r\n }\r\n // Disconnect all shadow observers\r\n shadowObservers.forEach((mo) => mo.disconnect());\r\n },\r\n flush,\r\n };\r\n }\r\n\r\n /**\r\n * Dynamically load and (idempotently) define a set of web components by tag name.\r\n */\r\n static async define(...args) {\r\n let opts = {};\r\n if (args.length && typeof args[args.length - 1] === \"object\") {\r\n opts = args.pop() || {};\r\n }\r\n const tags = args;\r\n\r\n const {\r\n baseURL,\r\n mapper = (tag) => `${tag}.js`,\r\n onError = (tag, err) =>\r\n console.error(`[defineWebComponents] ${tag}:`, err),\r\n } = opts;\r\n\r\n const base = baseURL\r\n ? new URL(\r\n baseURL,\r\n typeof location !== \"undefined\" ? location.href : import.meta.url\r\n )\r\n : new URL(\"./\", import.meta.url);\r\n\r\n const toPascal = (tag) =>\r\n tag.toLowerCase().replace(/(^|-)([a-z])/g, (_, __, c) => c.toUpperCase());\r\n\r\n const loadOne = async (tag) => {\r\n try {\r\n if (customElements.get(tag)) return { tag, status: \"already-defined\" };\r\n\r\n // Allow mapper to return either a string (path) or a URL instance\r\n const spec = mapper(tag);\r\n const href = spec instanceof URL ? spec.href : new URL(spec, base).href;\r\n const mod = await import(href);\r\n const Named = mod?.default ?? mod?.[toPascal(tag)];\r\n\r\n if (!Named) {\r\n if (customElements.get(tag)) return { tag, status: \"self-defined\" };\r\n throw new Error(\r\n `No export found for ${tag}. Expected default export or named export \"${toPascal(\r\n tag\r\n )}\".`\r\n );\r\n }\r\n\r\n if (!customElements.get(tag)) {\r\n customElements.define(tag, Named);\r\n return { tag, status: \"defined\" };\r\n }\r\n return { tag, status: \"race-already-defined\" };\r\n } catch (err) {\r\n onError(tag, err);\r\n throw err;\r\n }\r\n };\r\n\r\n return Promise.all(tags.map(loadOne));\r\n }\r\n}\r\n", "/**\r\n * Shared initialization helpers for static and live startup.\r\n * Kept separate to avoid pulling live-only logic into the base runtime bundle.\r\n */\r\n\r\nimport { AutoDefiner as CoreAutoDefiner } from \"pure-web/auto-definer\";\r\nimport { PDS } from \"../pds-singleton.js\";\r\n\r\nconst __ABSOLUTE_URL_PATTERN__ = /^[a-z][a-z0-9+\\-.]*:\\/\\//i;\r\nconst __MODULE_URL__ = (() => {\r\n try {\r\n return import.meta.url;\r\n } catch (e) {\r\n return undefined;\r\n }\r\n})();\r\n\r\nexport const ensureTrailingSlash = (value) =>\r\n typeof value === \"string\" && value.length && !value.endsWith(\"/\")\r\n ? `${value}/`\r\n : value;\r\n\r\nexport function ensureAbsoluteAssetURL(value, options = {}) {\r\n if (!value || __ABSOLUTE_URL_PATTERN__.test(value)) {\r\n return value;\r\n }\r\n\r\n const { preferModule = true } = options;\r\n\r\n const tryModule = () => {\r\n if (!__MODULE_URL__) return null;\r\n try {\r\n return new URL(value, __MODULE_URL__).href;\r\n } catch (e) {\r\n return null;\r\n }\r\n };\r\n\r\n const tryWindow = () => {\r\n if (typeof window === \"undefined\" || !window.location?.origin) {\r\n return null;\r\n }\r\n try {\r\n return new URL(value, window.location.origin).href;\r\n } catch (e) {\r\n return null;\r\n }\r\n };\r\n\r\n const resolved = preferModule\r\n ? tryModule() || tryWindow()\r\n : tryWindow() || tryModule();\r\n\r\n return resolved || value;\r\n}\r\n\r\nconst __MODULE_DEFAULT_ASSET_ROOT__ = (() => {\r\n if (!__MODULE_URL__) return undefined;\r\n try {\r\n const parsed = new URL(__MODULE_URL__);\r\n if (/\\/public\\/assets\\/js\\//.test(parsed.pathname)) {\r\n return new URL(\"../pds/\", __MODULE_URL__).href;\r\n }\r\n } catch (e) {\r\n return undefined;\r\n }\r\n return undefined;\r\n})();\r\n\r\nlet __foucListenerAttached = false;\r\n\r\nexport function attachFoucListener(PDS) {\r\n if (__foucListenerAttached || typeof document === \"undefined\") return;\r\n __foucListenerAttached = true;\r\n PDS.addEventListener(\"pds:ready\", (event) => {\r\n const mode = event.detail?.mode;\r\n if (mode) {\r\n document.documentElement.classList.add(`pds-${mode}`, \"pds-ready\");\r\n }\r\n });\r\n}\r\n\r\n// Internal: deep merge utility (arrays replace; objects merge)\r\nfunction __deepMerge(target = {}, source = {}) {\r\n if (!source || typeof source !== \"object\") return target;\r\n const out = Array.isArray(target) ? [...target] : { ...target };\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\r\n out[key] = __deepMerge(\r\n out[key] && typeof out[key] === \"object\" ? out[key] : {},\r\n value\r\n );\r\n } else {\r\n out[key] = value;\r\n }\r\n }\r\n return out;\r\n}\r\n\r\n// Internal: create a slug for matching names like \"Paper & Ink\" -> \"paper-and-ink\"\r\nfunction __slugify(str = \"\") {\r\n return String(str)\r\n .toLowerCase()\r\n .replace(/&/g, \" and \")\r\n .replace(/[^a-z0-9]+/g, \"-\")\r\n .replace(/^-+|-+$/g, \"\");\r\n}\r\n\r\n// Internal: recursively remove functions from an object to make it cloneable\r\nexport function stripFunctions(obj) {\r\n if (obj === null || obj === undefined) return obj;\r\n if (typeof obj === \"function\") return undefined;\r\n if (typeof obj !== \"object\") return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => stripFunctions(item)).filter((item) => item !== undefined);\r\n }\r\n\r\n const result = {};\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n if (typeof value !== \"function\") {\r\n const stripped = stripFunctions(value);\r\n if (stripped !== undefined) {\r\n result[key] = stripped;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nfunction cloneWithoutFunctions(value) {\r\n const cloneCandidate = stripFunctions(value);\r\n if (typeof structuredClone === \"function\") {\r\n return structuredClone(cloneCandidate);\r\n }\r\n return JSON.parse(JSON.stringify(cloneCandidate));\r\n}\r\n\r\n// Internal: normalize first-arg config to a full generator config and extract enhancers if provided inline\r\nexport function normalizeInitConfig(\r\n inputConfig = {},\r\n options = {},\r\n { presets, defaultLog, validateDesignConfig, validateInitConfig } = {}\r\n) {\r\n const logFn =\r\n inputConfig && typeof inputConfig.log === \"function\"\r\n ? inputConfig.log\r\n : defaultLog;\r\n\r\n // If caller passed a plain design config (legacy), keep as-is\r\n const hasDesignKeys =\r\n typeof inputConfig === \"object\" &&\r\n (\"colors\" in inputConfig ||\r\n \"typography\" in inputConfig ||\r\n \"spatialRhythm\" in inputConfig ||\r\n \"shape\" in inputConfig ||\r\n \"behavior\" in inputConfig ||\r\n \"layout\" in inputConfig ||\r\n \"advanced\" in inputConfig ||\r\n \"a11y\" in inputConfig ||\r\n \"components\" in inputConfig ||\r\n \"icons\" in inputConfig);\r\n\r\n // Extract potential inline enhancers from config; prefer inline over options\r\n let inlineEnhancers = inputConfig && inputConfig.enhancers;\r\n if (inlineEnhancers && !Array.isArray(inlineEnhancers)) {\r\n // If an object was provided, convert to array of values\r\n inlineEnhancers = Object.values(inlineEnhancers);\r\n }\r\n const enhancers = inlineEnhancers ?? options.enhancers ?? [];\r\n\r\n // New API: { preset?: string, design?: object }\r\n const presetId = inputConfig && inputConfig.preset;\r\n const designOverrides = inputConfig && inputConfig.design;\r\n const iconOverrides =\r\n inputConfig &&\r\n inputConfig.icons &&\r\n typeof inputConfig.icons === \"object\"\r\n ? inputConfig.icons\r\n : null;\r\n\r\n const hasNewShape =\r\n \"preset\" in (inputConfig || {}) ||\r\n \"design\" in (inputConfig || {}) ||\r\n \"enhancers\" in (inputConfig || {});\r\n\r\n if (inputConfig && typeof inputConfig === \"object\" && typeof validateInitConfig === \"function\") {\r\n validateInitConfig(inputConfig, { log: logFn, context: \"PDS.start\" });\r\n }\r\n\r\n let generatorConfig;\r\n let presetInfo = null;\r\n\r\n if (hasNewShape) {\r\n if (\r\n designOverrides &&\r\n typeof designOverrides === \"object\" &&\r\n typeof validateDesignConfig === \"function\"\r\n ) {\r\n validateDesignConfig(designOverrides, { log: logFn, context: \"PDS.start\" });\r\n }\r\n // Always resolve a preset; default if none provided\r\n const effectivePreset = String(presetId || \"default\").toLowerCase();\r\n const found =\r\n presets?.[effectivePreset] ||\r\n Object.values(presets || {}).find(\r\n (p) =>\r\n __slugify(p.name) === effectivePreset ||\r\n String(p.name || \"\").toLowerCase() === effectivePreset\r\n );\r\n if (!found)\r\n throw new Error(`PDS preset not found: \"${presetId || \"default\"}\"`);\r\n\r\n presetInfo = {\r\n id: found.id || __slugify(found.name),\r\n name: found.name || found.id || String(effectivePreset),\r\n };\r\n\r\n // Merge preset with design overrides\r\n let mergedDesign = cloneWithoutFunctions(found);\r\n if (\r\n (designOverrides && typeof designOverrides === \"object\") ||\r\n iconOverrides\r\n ) {\r\n // Strip functions before cloning to avoid DataCloneError\r\n const cloneableDesign = designOverrides\r\n ? stripFunctions(designOverrides)\r\n : {};\r\n const cloneableIcons = iconOverrides\r\n ? stripFunctions(iconOverrides)\r\n : null;\r\n const mergedOverrides = cloneableIcons\r\n ? __deepMerge(cloneableDesign, { icons: cloneableIcons })\r\n : cloneableDesign;\r\n mergedDesign = __deepMerge(mergedDesign, cloneWithoutFunctions(mergedOverrides));\r\n }\r\n\r\n // Build structured config with design nested\r\n // Exclude runtime-specific properties that shouldn't be passed to Generator\r\n const {\r\n mode, autoDefine, applyGlobalStyles, manageTheme,\r\n themeStorageKey, preloadStyles, criticalLayers,\r\n managerURL, manager,\r\n localization,\r\n preset: _preset, design: _design, enhancers: _enhancers,\r\n log: userLog,\r\n ...otherProps\r\n } = inputConfig;\r\n\r\n generatorConfig = {\r\n ...otherProps,\r\n design: mergedDesign,\r\n preset: presetInfo.name,\r\n log: userLog || defaultLog,\r\n };\r\n } else if (hasDesignKeys) {\r\n if (typeof validateDesignConfig === \"function\") {\r\n validateDesignConfig(inputConfig, { log: logFn, context: \"PDS.start\" });\r\n }\r\n // Back-compat: treat the provided object as the full design, wrap it\r\n const { log: userLog, ...designConfig } = inputConfig;\r\n generatorConfig = {\r\n design: cloneWithoutFunctions(designConfig),\r\n log: userLog || defaultLog,\r\n };\r\n } else {\r\n // Nothing recognizable: use default preset\r\n const foundDefault =\r\n presets?.[\"default\"] ||\r\n Object.values(presets || {}).find((p) => __slugify(p.name) === \"default\");\r\n if (!foundDefault) throw new Error(\"PDS default preset not available\");\r\n presetInfo = {\r\n id: foundDefault.id || \"default\",\r\n name: foundDefault.name || \"Default\",\r\n };\r\n generatorConfig = {\r\n design: cloneWithoutFunctions(foundDefault),\r\n preset: presetInfo.name,\r\n log: defaultLog,\r\n };\r\n }\r\n\r\n return { generatorConfig, enhancers, presetInfo };\r\n}\r\n\r\n// Internal: resolve theme and set html[data-theme], return resolvedTheme and storedTheme\r\nexport function resolveThemeAndApply({ manageTheme, themeStorageKey, applyResolvedTheme, setupSystemListenerIfNeeded }) {\r\n let resolvedTheme = \"light\";\r\n let storedTheme = null;\r\n if (manageTheme && typeof window !== \"undefined\") {\r\n // Read raw preference (may be null, 'system', 'light', 'dark') using provided storage key\r\n try {\r\n storedTheme = localStorage.getItem(themeStorageKey) || null;\r\n } catch (e) {\r\n storedTheme = null;\r\n }\r\n\r\n // Apply the resolved theme and ensure system listener exists when needed\r\n try {\r\n applyResolvedTheme?.(storedTheme);\r\n setupSystemListenerIfNeeded?.(storedTheme);\r\n } catch (e) {}\r\n\r\n // Compute explicit resolvedTheme to return\r\n if (storedTheme) {\r\n if (storedTheme === \"system\") {\r\n const prefersDark =\r\n window.matchMedia &&\r\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n resolvedTheme = prefersDark ? \"dark\" : \"light\";\r\n } else {\r\n resolvedTheme = storedTheme;\r\n }\r\n } else {\r\n const prefersDark =\r\n window.matchMedia &&\r\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n resolvedTheme = prefersDark ? \"dark\" : \"light\";\r\n }\r\n }\r\n return { resolvedTheme, storedTheme };\r\n}\r\n\r\nexport function resolveRuntimeAssetRoot(config, { resolvePublicAssetURL }) {\r\n const hasCustomRoot = Boolean(config?.public?.root || config?.static?.root);\r\n let candidate = resolvePublicAssetURL(config);\r\n\r\n if (!hasCustomRoot && __MODULE_DEFAULT_ASSET_ROOT__) {\r\n candidate = __MODULE_DEFAULT_ASSET_ROOT__;\r\n }\r\n\r\n return ensureTrailingSlash(ensureAbsoluteAssetURL(candidate));\r\n}\r\n\r\n// Internal: setup AutoDefiner and run enhancers\r\nexport async function setupAutoDefinerAndEnhancers(options, { baseEnhancers = [] } = {}) {\r\n const {\r\n autoDefineBaseURL = \"/auto-define/\",\r\n autoDefinePreload = [],\r\n autoDefineMapper = null,\r\n enhancers = [],\r\n autoDefineOverrides = null,\r\n autoDefinePreferModule = true,\r\n } = options;\r\n\r\n // Merge defaults with user enhancers (user overrides by selector)\r\n const mergedEnhancers = (() => {\r\n const map = new Map();\r\n (baseEnhancers || []).forEach((e) => map.set(e.selector, e));\r\n (enhancers || []).forEach((e) => map.set(e.selector, e));\r\n return Array.from(map.values());\r\n })();\r\n\r\n // Setup AutoDefiner in browser context (it already observes shadow DOMs)\r\n let autoDefiner = null;\r\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\r\n const AutoDefinerCtor = CoreAutoDefiner;\r\n\r\n const defaultMapper = (tag) => {\r\n switch (tag) {\r\n case \"pds-tabpanel\":\r\n return \"pds-tabstrip.js\";\r\n default:\r\n return `${tag}.js`;\r\n }\r\n };\r\n\r\n // Respect user overrides but never allow them to overwrite our mapper wrapper.\r\n // Also merge `autoDefine.enhancers` safely instead of allowing it to clobber\r\n // default enhancers (this previously caused silent loss of required/dropdown behavior).\r\n const {\r\n mapper: _overrideMapperIgnored,\r\n enhancers: overrideEnhancers,\r\n ...restAutoDefineOverrides\r\n } =\r\n autoDefineOverrides && typeof autoDefineOverrides === \"object\"\r\n ? autoDefineOverrides\r\n : {};\r\n\r\n const normalizedOverrideEnhancers = (() => {\r\n if (!overrideEnhancers) return [];\r\n if (Array.isArray(overrideEnhancers)) return overrideEnhancers;\r\n if (typeof overrideEnhancers === \"object\") {\r\n return Object.values(overrideEnhancers);\r\n }\r\n return [];\r\n })();\r\n\r\n const resolvedEnhancers = (() => {\r\n const map = new Map();\r\n (mergedEnhancers || []).forEach((enhancer) => {\r\n if (!enhancer?.selector) return;\r\n map.set(enhancer.selector, enhancer);\r\n });\r\n\r\n (normalizedOverrideEnhancers || []).forEach((enhancer) => {\r\n if (!enhancer?.selector) return;\r\n const existing = map.get(enhancer.selector) || null;\r\n map.set(enhancer.selector, {\r\n ...(existing || {}),\r\n ...enhancer,\r\n run:\r\n typeof enhancer?.run === \"function\"\r\n ? enhancer.run\r\n : existing?.run,\r\n });\r\n });\r\n\r\n return Array.from(map.values());\r\n })();\r\n\r\n const normalizedBaseURL = autoDefineBaseURL\r\n ? ensureTrailingSlash(\r\n ensureAbsoluteAssetURL(autoDefineBaseURL, {\r\n preferModule: autoDefinePreferModule,\r\n })\r\n )\r\n : autoDefineBaseURL;\r\n\r\n const autoDefineConfig = {\r\n baseURL: normalizedBaseURL,\r\n predefine: autoDefinePreload,\r\n scanExisting: true,\r\n observeShadows: true,\r\n patchAttachShadow: true,\r\n debounceMs: 16,\r\n enhancers: resolvedEnhancers,\r\n onError: (tag, err) => {\r\n if (typeof tag === \"string\" && tag.startsWith(\"pds-\")) {\r\n const litDependentComponents = [\"pds-form\", \"pds-drawer\"];\r\n const isLitComponent = litDependentComponents.includes(tag);\r\n const isMissingLitError = err?.message?.includes(\"#pds/lit\") ||\r\n err?.message?.includes(\"Failed to resolve module specifier\");\r\n\r\n if (isLitComponent && isMissingLitError) {\r\n PDS.log(\r\n \"error\",\r\n `\u274C PDS component <${tag}> requires Lit but #pds/lit is not in import map.\r\n See: https://github.com/Pure-Web-Foundation/pure-ds/blob/main/readme.md#lit-components-not-working`\r\n );\r\n } else {\r\n PDS.log(\r\n \"warn\",\r\n `\u26A0\uFE0F PDS component <${tag}> not found. Assets may not be installed.`\r\n );\r\n }\r\n } else {\r\n PDS.log(\"error\", `\u274C Auto-define error for <${tag}>:`, err);\r\n }\r\n },\r\n // Apply all user overrides except mapper so we can still wrap it\r\n ...restAutoDefineOverrides,\r\n mapper: (tag) => {\r\n // If already defined, do nothing\r\n if (customElements.get(tag)) return null;\r\n\r\n // If a custom mapper exists, let it try first; if it returns a non-value, fallback to default\r\n if (typeof autoDefineMapper === \"function\") {\r\n try {\r\n const mapped = autoDefineMapper(tag);\r\n if (mapped === undefined) {\r\n return defaultMapper(tag);\r\n }\r\n return mapped;\r\n } catch (e) {\r\n PDS.log(\r\n \"warn\",\r\n \"Custom autoDefine.mapper error; falling back to default:\",\r\n e?.message || e\r\n );\r\n return defaultMapper(tag);\r\n }\r\n }\r\n\r\n // No custom mapper provided \u2014 use default\r\n return defaultMapper(tag);\r\n },\r\n };\r\n\r\n autoDefiner = new AutoDefinerCtor(autoDefineConfig);\r\n if (\r\n autoDefinePreload.length > 0 &&\r\n typeof AutoDefinerCtor.define === \"function\"\r\n ) {\r\n await AutoDefinerCtor.define(...autoDefinePreload, {\r\n baseURL: autoDefineBaseURL,\r\n mapper: autoDefineConfig.mapper,\r\n onError: autoDefineConfig.onError,\r\n });\r\n }\r\n }\r\n\r\n return { autoDefiner, mergedEnhancers };\r\n}\r\n", "const DEFAULT_THEMES = [\"light\", \"dark\"];\r\nconst VALID_THEMES = new Set(DEFAULT_THEMES);\r\n\r\nexport function normalizePresetThemes(preset) {\r\n const themes = Array.isArray(preset?.themes)\r\n ? preset.themes.map((theme) => String(theme).toLowerCase())\r\n : DEFAULT_THEMES;\r\n const normalized = themes.filter((theme) => VALID_THEMES.has(theme));\r\n return normalized.length ? normalized : DEFAULT_THEMES;\r\n}\r\n\r\nexport function resolveThemePreference(preference, { preferDocument = true } = {}) {\r\n const normalized = String(preference || \"\").toLowerCase();\r\n if (VALID_THEMES.has(normalized)) return normalized;\r\n\r\n if (preferDocument && typeof document !== \"undefined\") {\r\n const applied = document.documentElement?.getAttribute(\"data-theme\");\r\n if (VALID_THEMES.has(applied)) return applied;\r\n }\r\n\r\n if (typeof window !== \"undefined\" && window.matchMedia) {\r\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\r\n return prefersDark ? \"dark\" : \"light\";\r\n }\r\n\r\n return \"light\";\r\n}\r\n\r\nexport function isPresetThemeCompatible(preset, themePreference) {\r\n const resolvedTheme = resolveThemePreference(themePreference);\r\n const themes = normalizePresetThemes(preset);\r\n return themes.includes(resolvedTheme);\r\n}\r\n", "/**\n * Live-mode initialization and API surface for PDS.\n * Separated to keep the base runtime bundle lean for production/static usage.\n */\nimport { Generator } from \"./pds-generator.js\";\nimport { msg } from \"../common/localization.js\";\nimport { applyStyles, adoptLayers, adoptPrimitives } from \"./pds-runtime.js\";\nimport {\n presets,\n defaultLog,\n PDS_CONFIG_RELATIONS,\n PDS_DESIGN_CONFIG_SPEC,\n PDS_DEFAULT_CONFIG_EDITOR_METADATA,\n PDS_DEFAULT_CONFIG_FORM_SCHEMA,\n buildDesignConfigFormSchema,\n getDesignConfigEditorMetadata,\n validateDesignConfig,\n validateInitConfig,\n} from \"./pds-config.js\";\nimport { defaultPDSEnhancers } from \"./pds-enhancers.js\";\nimport { defaultPDSEnhancerMetadata } from \"./pds-enhancers-meta.js\";\nimport { resolvePublicAssetURL } from \"./pds-paths.js\";\nimport { loadTypographyFonts } from \"../common/font-loader.js\";\nimport {\n ensureAbsoluteAssetURL,\n ensureTrailingSlash,\n attachFoucListener,\n normalizeInitConfig,\n resolveRuntimeAssetRoot,\n resolveThemeAndApply,\n setupAutoDefinerAndEnhancers,\n stripFunctions,\n} from \"./pds-start-helpers.js\";\nimport {\n isPresetThemeCompatible,\n normalizePresetThemes,\n resolveThemePreference,\n} from \"./pds-theme-utils.js\";\n\nlet __liveApiReady = false;\n\nconst LIVE_EDIT_TOGGLE_ID = \"pds-live-edit-toggle\";\nconst LIVE_EDIT_TOGGLE_STYLE_ID = \"pds-live-edit-toggle-style\";\n\nfunction deepFreeze(value, seen = new WeakSet()) {\n if (!value || typeof value !== \"object\") {\n return value;\n }\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n Object.freeze(value);\n for (const key of Object.keys(value)) {\n deepFreeze(value[key], seen);\n }\n return value;\n}\n\nfunction cloneWithoutFunctions(value) {\n const cloneCandidate = stripFunctions(value);\n if (typeof structuredClone === \"function\") {\n return structuredClone(cloneCandidate);\n }\n return JSON.parse(JSON.stringify(cloneCandidate));\n}\n\nfunction toReadonlyClone(value) {\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value !== \"object\") {\n return value;\n }\n return deepFreeze(cloneWithoutFunctions(value));\n}\n\nfunction whenDocumentBodyReady(callback) {\n if (typeof document === \"undefined\" || typeof callback !== \"function\") return;\n if (document.body) {\n callback();\n return;\n }\n\n const onReady = () => {\n if (!document.body) return;\n document.removeEventListener(\"DOMContentLoaded\", onReady);\n callback();\n };\n\n document.addEventListener(\"DOMContentLoaded\", onReady, { once: true });\n}\n\nfunction mountLiveEdit(options = {}) {\n const interactive = options?.interactive !== false;\n if (typeof document === \"undefined\") return;\n whenDocumentBodyReady(() => {\n if (!document.querySelector(\"pds-live-edit\")) {\n const liveEditor = document.createElement(\"pds-live-edit\");\n if (!interactive) {\n liveEditor.setAttribute(\"data-pds-live-settings-only\", \"true\");\n }\n document.body.appendChild(liveEditor);\n } else if (!interactive) {\n const existing = document.querySelector(\"pds-live-edit\");\n if (existing) {\n existing.setAttribute(\"data-pds-live-settings-only\", \"true\");\n }\n }\n });\n}\n\nfunction waitFor(ms = 0) {\n return new Promise((resolve) => {\n setTimeout(resolve, Math.max(0, Number(ms) || 0));\n });\n}\n\nasync function ensureLiveEditInstance(options = {}) {\n const mountIfMissing = options?.mountIfMissing !== false;\n const interactive = options?.interactive !== false;\n const requiredMethod =\n typeof options?.requiredMethod === \"string\" && options.requiredMethod.trim()\n ? options.requiredMethod.trim()\n : \"openDesignSettings\";\n const timeoutMs = Number.isFinite(Number(options?.timeoutMs))\n ? Number(options.timeoutMs)\n : 2400;\n\n if (typeof document === \"undefined\") return null;\n if (!mountIfMissing && !document.querySelector(\"pds-live-edit\")) {\n return null;\n }\n if (mountIfMissing) {\n mountLiveEdit({ interactive });\n }\n\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n const liveEditor = document.querySelector(\"pds-live-edit\");\n if (!liveEditor) {\n await waitFor(40);\n continue;\n }\n\n if (typeof liveEditor?.[requiredMethod] === \"function\") {\n return liveEditor;\n }\n\n if (\n typeof customElements !== \"undefined\" &&\n typeof customElements.whenDefined === \"function\"\n ) {\n try {\n await Promise.race([customElements.whenDefined(\"pds-live-edit\"), waitFor(80)]);\n } catch (error) {\n await waitFor(40);\n }\n continue;\n }\n\n await waitFor(40);\n }\n\n const fallback = document.querySelector(\"pds-live-edit\");\n if (fallback && typeof fallback?.[requiredMethod] === \"function\") {\n return fallback;\n }\n return null;\n}\n\nfunction unmountLiveEdit() {\n if (typeof document === \"undefined\") return;\n const editors = document.querySelectorAll(\"pds-live-edit\");\n editors.forEach((editor) => {\n if (typeof editor?.setInteractiveEditingEnabled === \"function\") {\n editor.setInteractiveEditingEnabled(false);\n }\n editor.remove();\n });\n}\n\nfunction getLiveEditInteractiveState(liveEditor) {\n if (!liveEditor) return false;\n if (typeof liveEditor.isInteractiveEditingEnabled === \"function\") {\n return Boolean(liveEditor.isInteractiveEditingEnabled());\n }\n return true;\n}\n\nfunction ensureLiveEditToggleStyles() {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(LIVE_EDIT_TOGGLE_STYLE_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = LIVE_EDIT_TOGGLE_STYLE_ID;\n style.textContent = /*css*/`\n :where(.pds-live-edit-toggle-nav) {\n position: fixed;\n top: var(--spacing-3);\n right: var(--spacing-3);\n z-index: var(--z-dropdown, 1050);\n }\n\n :where(.pds-live-edit-toggle-nav menu) {\n min-width: 220px;\n }\n\n :where(.pds-live-edit-toggle-nav menu a[data-pds-live-action]) {\n cursor: pointer;\n }\n\n :where(.pds-live-edit-toggle-nav menu li.pds-live-shared-quick-mode-item) {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n :where(.pds-live-edit-toggle-nav menu li.pds-live-shared-quick-mode-item .pds-live-editor-menu) {\n display: grid;\n gap: var(--spacing-2);\n padding: var(--spacing-2); \n }\n\n :where(.pds-live-edit-toggle-nav menu li.pds-live-shared-quick-mode-item label) {\n display: grid;\n gap: var(--spacing-1);\n margin: 0;\n }\n\n :where(.pds-live-edit-toggle-nav menu li.pds-live-shared-quick-mode-item label > span) {\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n }\n\n :where(.pds-live-edit-toggle-nav menu li > hr) {\n border: 0;\n border-top: var(--border-width-thin) solid var(--color-border);\n margin: var(--spacing-2) 0 var(--spacing-1) 0;\n }\n\n :where(.pds-live-edit-toggle-nav menu li:has(> hr)) {\n padding: 0;\n margin: 0;\n list-style: none;\n pointer-events: none;\n }\n\n :where(.pds-live-edit-toggle-nav menu a[data-pds-live-action=\"reset-config\"]) {\n color: var(--color-danger-text);\n }\n\n :where(.pds-live-edit-toggle-nav menu a[data-pds-live-action=\"reset-config\"] pds-icon) {\n color: var(--color-danger-text);\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction updateLiveEditToggleState(button, isEnabled) {\n if (!button) return;\n\n button.classList.toggle(\"btn-primary\", isEnabled);\n button.classList.toggle(\"btn-secondary\", !isEnabled);\n button.setAttribute(\"aria-pressed\", isEnabled ? \"true\" : \"false\");\n\n const label = \"PDS Manager\";\n button.setAttribute(\"aria-label\", label);\n button.setAttribute(\"title\", label);\n}\n\nasync function ensureLiveEditToggleButton() {\n if (typeof document === \"undefined\") return null;\n\n ensureLiveEditToggleStyles();\n\n let button = document.getElementById(LIVE_EDIT_TOGGLE_ID);\n if (!button) {\n const nav = document.createElement(\"nav\");\n nav.className = \"pds-live-edit-toggle-nav\";\n nav.setAttribute(\"data-dropdown\", \"\");\n nav.setAttribute(\"data-mode\", \"auto\");\n nav.setAttribute(\"data-pds-live-edit-ignore\", \"true\");\n\n button = document.createElement(\"button\");\n button.id = LIVE_EDIT_TOGGLE_ID;\n button.type = \"button\";\n button.className = \"icon-only btn-secondary\";\n button.setAttribute(\"data-pds-live-edit-ignore\", \"true\");\n button.innerHTML = '<pds-icon icon=\"cursor-click\" size=\"sm\"></pds-icon>';\n\n const menu = document.createElement(\"menu\");\n menu.setAttribute(\"data-pds-live-edit-ignore\", \"true\");\n\n const createItem = (action, label, icon) => {\n const li = document.createElement(\"li\");\n const link = document.createElement(\"a\");\n link.href = \"#\";\n link.dataset.pdsLiveAction = action;\n link.setAttribute(\"data-pds-live-edit-ignore\", \"true\");\n\n const iconEl = document.createElement(\"pds-icon\");\n iconEl.setAttribute(\"icon\", icon);\n iconEl.setAttribute(\"size\", \"sm\");\n\n link.append(iconEl, document.createTextNode(` ${label}`));\n li.appendChild(link);\n return li;\n };\n\n const createSeparator = () => {\n const li = document.createElement(\"li\");\n li.setAttribute(\"data-pds-live-edit-ignore\", \"true\");\n const hr = document.createElement(\"hr\");\n hr.setAttribute(\"aria-hidden\", \"true\");\n li.appendChild(hr);\n return li;\n };\n\n menu.appendChild(createItem(\"toggle\", msg(\"Toggle live editing\"), \"pencil\"));\n\n const settingsItem = createItem(\"open-settings\", msg(\"Open Settings\"), \"gear\");\n settingsItem.setAttribute(\"data-dropdown-close\", \"\");\n\n menu.appendChild(settingsItem);\n \n menu.appendChild(createItem(\"reset-config\", msg(\"Reset Config\"), \"arrow-counter-clockwise\"));\n\n await ensureSharedQuickModeToggleMenuItem(menu);\n\n nav.append(button, menu);\n\n whenDocumentBodyReady(() => {\n if (!document.getElementById(LIVE_EDIT_TOGGLE_ID)) {\n document.body.appendChild(nav);\n }\n });\n }\n\n return button;\n}\n\nasync function ensureSharedQuickModeToggleMenuItem(menu) {\n if (!(menu instanceof Element)) return;\n if (menu.__pdsLiveSharedMenuItemInFlight) {\n return menu.__pdsLiveSharedMenuItemInFlight;\n }\n\n menu.__pdsLiveSharedMenuItemInFlight = (async () => {\n menu\n .querySelectorAll(\"li.pds-live-shared-quick-mode-item\")\n .forEach((node) => node.remove());\n\n const liveEditor = await ensureLiveEditInstance({\n mountIfMissing: true,\n interactive: false,\n requiredMethod: \"createSharedQuickModeMenuItem\",\n timeoutMs: 7000,\n });\n\n if (!liveEditor || typeof liveEditor.createSharedQuickModeMenuItem !== \"function\") {\n return;\n }\n\n const sharedItem = await liveEditor.createSharedQuickModeMenuItem();\n if (!(sharedItem instanceof Element)) return;\n\n sharedItem.classList.add(\"pds-live-shared-quick-mode-item\");\n\n const resetLink = menu.querySelector('a[data-pds-live-action=\"reset-config\"]');\n const resetItem = resetLink?.closest(\"li\") || null;\n const previousItem = resetItem?.previousElementSibling || null;\n const separatorBeforeReset =\n previousItem && previousItem.querySelector?.(\":scope > hr\") ? previousItem : null;\n\n if (separatorBeforeReset) {\n menu.insertBefore(sharedItem, separatorBeforeReset);\n return;\n }\n\n if (resetItem) {\n menu.insertBefore(sharedItem, resetItem);\n return;\n }\n\n menu.appendChild(sharedItem);\n })();\n\n try {\n await menu.__pdsLiveSharedMenuItemInFlight;\n } finally {\n menu.__pdsLiveSharedMenuItemInFlight = null;\n }\n}\n\nfunction teardownLiveEditToggle() {\n if (typeof document === \"undefined\") return;\n const button = document.getElementById(LIVE_EDIT_TOGGLE_ID);\n if (button) {\n const nav = button.closest(\".pds-live-edit-toggle-nav\");\n if (nav) {\n nav.remove();\n } else {\n button.remove();\n }\n }\n const style = document.getElementById(LIVE_EDIT_TOGGLE_STYLE_ID);\n if (style) style.remove();\n unmountLiveEdit();\n}\n\nasync function initializeLiveEditToggle() {\n if (typeof document === \"undefined\") return;\n const toggleButton = await ensureLiveEditToggleButton();\n if (!toggleButton) return;\n\n const setLiveEditEnabled = async (enabled) => {\n if (enabled) {\n const liveEditor = await ensureLiveEditInstance({ mountIfMissing: true });\n if (liveEditor && typeof liveEditor.setInteractiveEditingEnabled === \"function\") {\n liveEditor.setInteractiveEditingEnabled(true);\n }\n } else {\n unmountLiveEdit();\n }\n updateLiveEditToggleState(toggleButton, enabled);\n };\n\n void setLiveEditEnabled(false);\n\n const actionHost = toggleButton.closest(\".pds-live-edit-toggle-nav\") || toggleButton;\n if (toggleButton.__pdsLiveEditActionHandler) {\n actionHost.removeEventListener(\"click\", toggleButton.__pdsLiveEditActionHandler);\n }\n\n const actionHandler = async (event) => {\n const actionElement = event.target?.closest?.(\"[data-pds-live-action]\");\n if (!actionElement) return;\n\n event.preventDefault();\n const action = String(actionElement.dataset.pdsLiveAction || \"\");\n\n if (action === \"toggle\") {\n const liveEditor = await ensureLiveEditInstance({ mountIfMissing: false });\n const isEnabled = getLiveEditInteractiveState(liveEditor);\n await setLiveEditEnabled(!isEnabled);\n return;\n }\n\n if (action === \"open-settings\") {\n const liveEditor = await ensureLiveEditInstance({\n mountIfMissing: true,\n requiredMethod: \"openDesignSettings\",\n interactive: false,\n });\n if (liveEditor && typeof liveEditor.setInteractiveEditingEnabled === \"function\") {\n liveEditor.setInteractiveEditingEnabled(false);\n }\n if (liveEditor && typeof liveEditor.openDesignSettings === \"function\") {\n updateLiveEditToggleState(toggleButton, false);\n await liveEditor.openDesignSettings();\n }\n return;\n }\n\n if (action === \"reset-config\") {\n const liveEditor = await ensureLiveEditInstance({\n mountIfMissing: true,\n requiredMethod: \"resetConfig\",\n interactive: false,\n });\n updateLiveEditToggleState(toggleButton, false);\n if (liveEditor && typeof liveEditor.resetConfig === \"function\") {\n await liveEditor.resetConfig();\n }\n return;\n }\n };\n\n toggleButton.__pdsLiveEditActionHandler = actionHandler;\n actionHost.addEventListener(\"click\", actionHandler);\n\n if (toggleButton.__pdsLiveEditDisableHandler) {\n document.removeEventListener(\"pds:live-edit:disable\", toggleButton.__pdsLiveEditDisableHandler);\n }\n if (toggleButton.__pdsLiveEditEnableHandler) {\n document.removeEventListener(\"pds:live-edit:enable\", toggleButton.__pdsLiveEditEnableHandler);\n }\n\n const disableHandler = () => {\n void setLiveEditEnabled(false);\n };\n\n const enableHandler = () => {\n void setLiveEditEnabled(true);\n };\n\n toggleButton.__pdsLiveEditDisableHandler = disableHandler;\n document.addEventListener(\"pds:live-edit:disable\", disableHandler);\n toggleButton.__pdsLiveEditEnableHandler = enableHandler;\n document.addEventListener(\"pds:live-edit:enable\", enableHandler);\n}\n\nfunction getStoredLiveConfig() {\n if (typeof window === \"undefined\" || !window.localStorage) return null;\n try {\n const raw = window.localStorage.getItem(\"pure-ds-config\");\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n if (parsed && (\"preset\" in parsed || \"design\" in parsed)) return parsed;\n } catch (e) {\n return null;\n }\n return null;\n}\n\nfunction deepMergeConfig(target = {}, source = {}) {\n if (!source || typeof source !== \"object\") return target;\n const out = Array.isArray(target) ? [...target] : { ...target };\n for (const [key, value] of Object.entries(source)) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n out[key] = deepMergeConfig(\n out[key] && typeof out[key] === \"object\" ? out[key] : {},\n value\n );\n } else {\n out[key] = value;\n }\n }\n return out;\n}\n\nfunction applyStoredConfigOverrides(baseConfig) {\n const stored = getStoredLiveConfig();\n if (!stored || !baseConfig || typeof baseConfig !== \"object\") return baseConfig;\n\n const storedPreset = stored.preset;\n const storedDesign =\n stored.design && typeof stored.design === \"object\" ? stored.design : null;\n\n if (!storedPreset && !storedDesign) return baseConfig;\n\n const hasNewShape =\n \"preset\" in baseConfig || \"design\" in baseConfig || \"enhancers\" in baseConfig;\n\n let nextConfig = { ...baseConfig };\n\n if (storedPreset) {\n nextConfig.preset = storedPreset;\n }\n\n if (storedDesign) {\n if (hasNewShape) {\n const baseDesign =\n baseConfig.design && typeof baseConfig.design === \"object\"\n ? baseConfig.design\n : {};\n nextConfig.design = deepMergeConfig(baseDesign, storedDesign);\n } else {\n nextConfig = deepMergeConfig(baseConfig, storedDesign);\n }\n }\n\n return nextConfig;\n}\n\nfunction buildPresetOmniboxSettings(PDS, options = {}) {\n const {\n hideCategory = true,\n itemGrid = \"45px 1fr\",\n includeIncompatible = true,\n disableIncompatible = true,\n categoryName = \"Presets\",\n theme,\n onSelect,\n iconHandler,\n } = options || {};\n\n const resolvedTheme = resolveThemePreference(theme ?? PDS?.theme);\n\n const defaultIconHandler = (item) => {\n const preset = findPresetById(item?.id);\n const colors = preset?.colors || {};\n const primary = colors?.primary;\n const secondary = colors?.secondary;\n const accent = colors?.accent;\n\n if (primary && secondary && accent) {\n return `<span style=\"display:flex;gap:1px;flex-shrink:0;\" aria-hidden=\"true\">\n <span style=\"display:inline-block;width:10px;height:20px;background-color:${primary};\"> </span>\n <span style=\"display:inline-block;width:10px;height:20px;background-color:${secondary};\"> </span>\n <span style=\"display:inline-block;width:10px;height:20px;background-color:${accent};\"> </span>\n </span>`;\n }\n\n if (item?.icon) {\n return `<pds-icon icon=\"${item.icon}\" size=\"sm\"></pds-icon>`;\n }\n return \"\";\n };\n\n const getPresetEntries = () => {\n const source = PDS?.presets || {};\n return Object.values(source || {}).filter((preset) => {\n const presetId = preset?.id || preset?.name;\n return Boolean(presetId);\n });\n };\n\n const findPresetById = (presetId) => {\n if (!presetId) return null;\n const entries = getPresetEntries();\n return (\n entries.find((preset) => String(preset?.id || preset?.name) === String(presetId)) ||\n null\n );\n };\n\n return {\n hideCategory,\n itemGrid,\n iconHandler:\n typeof iconHandler === \"function\" ? iconHandler : defaultIconHandler,\n categories: {\n [categoryName]: {\n trigger: () => true,\n getItems: (context = {}) => {\n const query = String(context?.search || \"\").toLowerCase().trim();\n const entries = getPresetEntries();\n\n return entries\n .filter((preset) => {\n const name = String(preset?.name || preset?.id || \"\").toLowerCase();\n const description = String(preset?.description || \"\").toLowerCase();\n const tags = Array.isArray(preset?.tags)\n ? preset.tags.map((tag) => String(tag).toLowerCase())\n : [];\n\n if (query) {\n const matchesQuery =\n name.includes(query) ||\n description.includes(query) ||\n tags.some((tag) => tag.includes(query));\n if (!matchesQuery) return false;\n }\n\n const compatible = isPresetThemeCompatible(preset, resolvedTheme);\n if (!includeIncompatible && !compatible) return false;\n return true;\n })\n .map((preset) => {\n const presetId = preset?.id || preset?.name;\n const compatible = isPresetThemeCompatible(preset, resolvedTheme);\n const supportedThemes = normalizePresetThemes(preset);\n const themeHint =\n supportedThemes.length === 1\n ? `${supportedThemes[0]} only`\n : `Not available in ${resolvedTheme} mode`;\n const baseDescription = String(preset?.description || \"\").trim();\n const description = compatible\n ? baseDescription\n : baseDescription\n ? `${baseDescription} - ${themeHint}`\n : themeHint;\n\n return {\n id: presetId,\n text: preset?.name || String(presetId),\n description,\n icon: \"palette\",\n class:\n !compatible && disableIncompatible ? \"disabled\" : \"\",\n disabled: !compatible && disableIncompatible,\n tooltip: !compatible ? themeHint : \"\",\n };\n })\n .sort((a, b) =>\n String(a.text || \"\").localeCompare(String(b.text || \"\"))\n );\n },\n action: async (selection) => {\n if (!selection?.id) return selection?.id;\n if (selection?.disabled) return selection?.id;\n\n const preset = findPresetById(selection.id);\n if (!preset) return selection?.id;\n\n if (typeof onSelect === \"function\") {\n return await onSelect({ preset, selection, resolvedTheme });\n }\n\n if (typeof PDS?.applyLivePreset === \"function\") {\n await PDS.applyLivePreset(preset.id || selection.id);\n }\n\n return preset.id || selection.id;\n },\n },\n },\n };\n}\n\nasync function __attachLiveAPIs(PDS, { applyResolvedTheme, setupSystemListenerIfNeeded, emitConfigChanged }) {\n if (__liveApiReady) return;\n\n const [ontologyModule, enumsModule, commonModule] =\n await Promise.all([\n import(\"./pds-ontology.js\"),\n import(\"./pds-enums.js\"),\n import(\"../common/common.js\"),\n ]);\n\n const ontology = ontologyModule?.default || ontologyModule?.ontology;\n const findComponentForElement = ontologyModule?.findComponentForElement;\n const enums = enumsModule?.enums;\n\n // Expose live-only APIs\n PDS.ontology = ontology;\n PDS.findComponentForElement = findComponentForElement;\n PDS.enums = enums;\n PDS.common = commonModule || {};\n PDS.presets = presets;\n PDS.configRelations = PDS_CONFIG_RELATIONS;\n PDS.configSpec = PDS_DESIGN_CONFIG_SPEC;\n PDS.configEditorMetadata = PDS_DEFAULT_CONFIG_EDITOR_METADATA;\n PDS.configFormSchema = PDS_DEFAULT_CONFIG_FORM_SCHEMA;\n PDS.buildConfigFormSchema = buildDesignConfigFormSchema;\n PDS.getConfigEditorMetadata = getDesignConfigEditorMetadata;\n PDS.enhancerMetadata = defaultPDSEnhancerMetadata;\n if (!Array.isArray(PDS.defaultEnhancers) || PDS.defaultEnhancers.length === 0) {\n PDS.defaultEnhancers = Array.isArray(defaultPDSEnhancers)\n ? defaultPDSEnhancers\n : [];\n }\n PDS.applyStyles = function(generator) {\n const targetGenerator = generator || Generator.instance;\n applyStyles(targetGenerator);\n if (typeof emitConfigChanged === \"function\") {\n emitConfigChanged({\n mode: \"live\",\n source: \"live:styles-applied\",\n });\n }\n };\n PDS.adoptLayers = function(shadowRoot, layers, additionalSheets) {\n return adoptLayers(\n shadowRoot,\n layers,\n additionalSheets,\n Generator.instance\n );\n };\n PDS.adoptPrimitives = function(shadowRoot, additionalSheets) {\n return adoptPrimitives(shadowRoot, additionalSheets, Generator.instance);\n };\n PDS.getGenerator = async function() {\n return Generator;\n };\n PDS.buildPresetOmniboxSettings = function(options = {}) {\n return buildPresetOmniboxSettings(PDS, options);\n };\n\n PDS.applyLivePreset = async function(presetId, options = {}) {\n if (!presetId) return false;\n if (!PDS.registry?.isLive) {\n PDS.log(\"warn\", \"PDS.applyLivePreset is only available in live mode.\");\n return false;\n }\n\n const baseConfig = PDS.currentConfig || {};\n const { design: _design, preset: _preset, ...rest } = baseConfig;\n const inputConfig = {\n ...cloneWithoutFunctions(rest),\n preset: presetId,\n };\n\n const normalized = normalizeInitConfig(inputConfig, {}, {\n presets,\n defaultLog,\n validateDesignConfig,\n validateInitConfig,\n });\n\n const resolvedTheme = resolveThemePreference(PDS.theme);\n if (!isPresetThemeCompatible(normalized.generatorConfig.design, resolvedTheme)) {\n const presetName =\n normalized.presetInfo?.name ||\n normalized.generatorConfig?.design?.name ||\n presetId;\n PDS.log(\n \"warn\",\n `PDS theme \"${resolvedTheme}\" not supported by preset \"${presetName}\".`\n );\n }\n\n if (baseConfig.theme && !normalized.generatorConfig.theme) {\n normalized.generatorConfig.theme = baseConfig.theme;\n }\n\n const generator = new Generator(normalized.generatorConfig);\n\n if (normalized.generatorConfig.design?.typography) {\n try {\n await loadTypographyFonts(normalized.generatorConfig.design.typography);\n } catch (error) {\n normalized.generatorConfig?.log?.(\n \"warn\",\n \"Failed to load some fonts from Google Fonts:\",\n error,\n );\n }\n }\n\n PDS.applyStyles?.(generator);\n\n const presetInfo = normalized.presetInfo || { id: presetId, name: presetId };\n PDS.currentPreset = presetInfo;\n PDS.compiled = toReadonlyClone({\n ...baseConfig,\n preset: normalized.generatorConfig.preset,\n design: normalized.generatorConfig.design,\n theme: normalized.generatorConfig.theme || baseConfig.theme,\n });\n PDS.configEditorMetadata = getDesignConfigEditorMetadata(\n normalized.generatorConfig.design\n );\n PDS.configFormSchema = buildDesignConfigFormSchema(\n normalized.generatorConfig.design\n );\n\n const persist = options?.persist !== false;\n if (persist && typeof window !== \"undefined\") {\n const storageKey = \"pure-ds-config\";\n try {\n const storedRaw = localStorage.getItem(storageKey);\n const storedParsed = storedRaw ? JSON.parse(storedRaw) : null;\n const nextStored = {\n ...(storedParsed && typeof storedParsed === \"object\"\n ? storedParsed\n : {}),\n preset: presetInfo.id || presetId,\n design: cloneWithoutFunctions(normalized.generatorConfig.design || {}),\n };\n localStorage.setItem(storageKey, JSON.stringify(nextStored));\n } catch (error) {\n normalized.generatorConfig?.log?.(\n \"warn\",\n \"Failed to store preset:\",\n error,\n );\n }\n }\n\n return true;\n };\n\n // Live-only preload helper\n PDS.preloadCritical = function(config, options = {}) {\n if (typeof window === \"undefined\" || !document.head || !config) {\n return;\n }\n\n const { theme, layers = [\"tokens\"] } = options;\n\n try {\n let resolvedTheme = theme || \"light\";\n if (theme === \"system\" || !theme) {\n const prefersDark =\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n resolvedTheme = prefersDark ? \"dark\" : \"light\";\n }\n\n document.documentElement.setAttribute(\"data-theme\", resolvedTheme);\n\n const tempConfig = config.design\n ? { ...config, theme: resolvedTheme }\n : { design: config, theme: resolvedTheme };\n const tempGenerator = new Generator(tempConfig);\n\n const criticalCSS = layers\n .map((layer) => {\n try {\n return tempGenerator.css?.[layer] || \"\";\n } catch (e) {\n return \"\";\n }\n })\n .filter((css) => css.trim())\n .join(\"\\n\");\n\n if (criticalCSS) {\n const existing = document.head.querySelector(\"style[data-pds-preload]\");\n if (existing) existing.remove();\n\n const styleEl = document.createElement(\"style\");\n styleEl.setAttribute(\"data-pds-preload\", \"\");\n styleEl.textContent = criticalCSS;\n document.head.insertBefore(styleEl, document.head.firstChild);\n }\n } catch (error) {\n PDS.log(\"warn\", \"PDS preload failed:\", error);\n }\n };\n\n __liveApiReady = true;\n}\n\n\nexport async function startLive(PDS, config, { emitReady, emitConfigChanged, applyResolvedTheme, setupSystemListenerIfNeeded }) {\n if (!config || typeof config !== \"object\") {\n throw new Error(\n \"PDS.start({ mode: 'live', ... }) requires a valid configuration object\"\n );\n }\n\n const explicitExternalIconPath =\n config?.design?.icons?.externalPath ||\n config?.icons?.externalPath ||\n null;\n\n config = applyStoredConfigOverrides(config);\n\n if (typeof explicitExternalIconPath === \"string\" && explicitExternalIconPath.trim()) {\n const baseDesign =\n config?.design && typeof config.design === \"object\" ? config.design : {};\n const baseIcons =\n baseDesign?.icons && typeof baseDesign.icons === \"object\"\n ? baseDesign.icons\n : {};\n\n config = {\n ...config,\n design: {\n ...baseDesign,\n icons: {\n ...baseIcons,\n externalPath: explicitExternalIconPath,\n },\n },\n };\n }\n\n // Attach live-only API surface (ontology, presets, query, etc.)\n await __attachLiveAPIs(PDS, { applyResolvedTheme, setupSystemListenerIfNeeded, emitConfigChanged });\n attachFoucListener(PDS);\n\n // FOUC Prevention: Use constructable stylesheet for synchronous, immediate effect\n if (typeof document !== \"undefined\" && document.adoptedStyleSheets) {\n const css = /*css*/`\n html { opacity: 0; }\n html.pds-ready { opacity: 1; transition: opacity 0.3s ease-in; }\n `;\n try {\n const hasFoucSheet = document.adoptedStyleSheets.some((sheet) => sheet._pdsFouc);\n if (!hasFoucSheet) {\n const foucSheet = new CSSStyleSheet();\n foucSheet.replaceSync(css);\n foucSheet._pdsFouc = true;\n document.adoptedStyleSheets = [foucSheet, ...document.adoptedStyleSheets];\n }\n } catch (e) {\n PDS.log(\"warn\", \"Constructable stylesheets not supported, using <style> tag fallback:\", e);\n const existingFoucStyle = document.head.querySelector(\"style[data-pds-fouc]\");\n if (!existingFoucStyle) {\n const foucStyle = document.createElement(\"style\");\n foucStyle.setAttribute(\"data-pds-fouc\", \"\");\n foucStyle.textContent = css;\n document.head.insertBefore(foucStyle, document.head.firstChild);\n }\n }\n }\n\n // Extract runtime flags directly from unified config\n let applyGlobalStyles = config.applyGlobalStyles ?? true;\n let manageTheme = config.manageTheme ?? true;\n let themeStorageKey = config.themeStorageKey ?? \"pure-ds-theme\";\n let preloadStyles = config.preloadStyles ?? false;\n let criticalLayers = config.criticalLayers ?? [\"tokens\", \"primitives\"];\n\n const cfgAuto = (config && config.autoDefine) || null;\n\n try {\n // 1) Handle theme preference\n const { resolvedTheme } = resolveThemeAndApply({\n manageTheme,\n themeStorageKey,\n applyResolvedTheme,\n setupSystemListenerIfNeeded,\n });\n\n // 2) Normalize first-arg API: support { preset, design, enhancers }\n const normalized = normalizeInitConfig(config, {}, {\n presets,\n defaultLog,\n validateDesignConfig,\n validateInitConfig,\n });\n if (manageTheme && !isPresetThemeCompatible(normalized.generatorConfig.design, resolvedTheme)) {\n const presetName =\n normalized.presetInfo?.name ||\n normalized.generatorConfig?.design?.name ||\n normalized.generatorConfig?.preset ||\n \"current preset\";\n PDS.log(\n \"warn\",\n `PDS theme \"${resolvedTheme}\" not supported by preset \"${presetName}\".`\n );\n }\n const userEnhancers = normalized.enhancers;\n const { log: logFn, ...configToClone } = normalized.generatorConfig;\n const generatorConfig = cloneWithoutFunctions(configToClone);\n generatorConfig.log = logFn;\n if (manageTheme) {\n generatorConfig.theme = resolvedTheme;\n }\n\n const generator = new Generator(generatorConfig);\n\n // 3) Load fonts from Google Fonts if needed (before applying styles)\n if (generatorConfig.design?.typography) {\n try {\n await loadTypographyFonts(generatorConfig.design.typography);\n } catch (ex) {\n generatorConfig?.log?.(\"warn\", \"Failed to load some fonts from Google Fonts:\", ex);\n }\n }\n\n // 4) Preload critical styles synchronously to prevent flash\n if (preloadStyles && typeof window !== \"undefined\" && document.head) {\n try {\n const criticalCSS = criticalLayers\n .map((layer) => {\n try {\n return generator.css?.[layer] || \"\";\n } catch (e) {\n generatorConfig?.log?.(\n \"warn\",\n `Failed to generate critical CSS for layer \"${layer}\":`,\n e\n );\n return \"\";\n }\n })\n .filter((css) => css.trim())\n .join(\"\\n\");\n\n if (criticalCSS) {\n const existingCritical = document.head.querySelector(\n \"style[data-pds-critical]\"\n );\n if (existingCritical) {\n existingCritical.remove();\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.setAttribute(\"data-pds-critical\", \"\");\n styleEl.textContent = criticalCSS;\n\n const insertAfter = document.head.querySelector(\n 'meta[charset], meta[name=\"viewport\"]'\n );\n if (insertAfter) {\n insertAfter.parentNode.insertBefore(\n styleEl,\n insertAfter.nextSibling\n );\n } else {\n document.head.insertBefore(styleEl, document.head.firstChild);\n }\n }\n } catch (error) {\n generatorConfig?.log?.(\"warn\", \"Failed to preload critical styles:\", error);\n }\n }\n\n // Set the registry to live mode\n PDS.registry.setLiveMode();\n\n // Log preset info if available\n if (normalized.presetInfo?.name) {\n generatorConfig?.log?.(\"log\", `PDS live with preset \"${normalized.presetInfo.name}\"`);\n } else {\n generatorConfig?.log?.(\"log\", \"PDS live with custom config\");\n }\n\n // Apply styles globally if requested (default behavior)\n if (applyGlobalStyles) {\n PDS.applyStyles?.(Generator.instance);\n\n if (typeof window !== \"undefined\") {\n setTimeout(() => {\n const criticalStyle = document.head.querySelector(\n \"style[data-pds-critical]\"\n );\n if (criticalStyle) criticalStyle.remove();\n\n const preloadStyle = document.head.querySelector(\n \"style[data-pds-preload]\"\n );\n if (preloadStyle) preloadStyle.remove();\n\n const legacyRuntime = document.getElementById(\n \"pds-runtime-stylesheet\"\n );\n if (legacyRuntime) legacyRuntime.remove();\n }, 100);\n }\n }\n\n const assetRootURL = resolveRuntimeAssetRoot(config, { resolvePublicAssetURL });\n\n let derivedAutoDefineBaseURL;\n if (cfgAuto && cfgAuto.baseURL) {\n derivedAutoDefineBaseURL = ensureTrailingSlash(\n ensureAbsoluteAssetURL(cfgAuto.baseURL, { preferModule: false })\n );\n } else {\n derivedAutoDefineBaseURL = `${assetRootURL}components/`;\n }\n\n // 5) Set up AutoDefiner + run enhancers (defaults merged with user)\n let autoDefiner = null;\n let mergedEnhancers = [];\n \n try {\n const res = await setupAutoDefinerAndEnhancers({\n autoDefineBaseURL: derivedAutoDefineBaseURL,\n autoDefinePreload:\n (cfgAuto && Array.isArray(cfgAuto.predefine) && cfgAuto.predefine) ||\n [],\n autoDefineMapper:\n (cfgAuto && typeof cfgAuto.mapper === \"function\" && cfgAuto.mapper) ||\n null,\n enhancers: userEnhancers,\n autoDefineOverrides: cfgAuto || null,\n autoDefinePreferModule: !(cfgAuto && cfgAuto.baseURL),\n }, { baseEnhancers: defaultPDSEnhancers });\n autoDefiner = res.autoDefiner;\n mergedEnhancers = res.mergedEnhancers || [];\n \n } catch (error) {\n generatorConfig?.log?.(\"error\", \"\u274C Failed to initialize AutoDefiner/Enhancers:\", error);\n }\n\n const resolvedConfig = generator?.options || generatorConfig;\n\n PDS.compiled = toReadonlyClone({\n mode: \"live\",\n ...resolvedConfig,\n theme: resolvedTheme,\n enhancers: mergedEnhancers,\n });\n PDS.configEditorMetadata = getDesignConfigEditorMetadata(\n normalized.generatorConfig.design\n );\n PDS.configFormSchema = buildDesignConfigFormSchema(\n normalized.generatorConfig.design\n );\n if (typeof emitConfigChanged === \"function\") {\n emitConfigChanged({\n mode: \"live\",\n source: \"live:config-applied\",\n preset: normalized.generatorConfig.preset,\n });\n }\n\n if (typeof document !== \"undefined\") {\n try {\n if (config?.liveEdit) {\n setTimeout(() => {\n void initializeLiveEditToggle();\n }, 0);\n } else {\n teardownLiveEditToggle();\n }\n } catch (error) {\n generatorConfig?.log?.(\"warn\", \"Live editor toggle failed to start:\", error);\n }\n }\n\n emitReady({\n mode: \"live\",\n generator,\n config: resolvedConfig,\n theme: resolvedTheme,\n autoDefiner,\n });\n\n return {\n generator,\n config: resolvedConfig,\n theme: resolvedTheme,\n autoDefiner,\n };\n } catch (error) {\n PDS.dispatchEvent(new CustomEvent(\"pds:error\", { detail: { error } }));\n throw error;\n }\n}\n", "const DEFAULT_CONFIDENCE = 0.5;\r\n\r\nfunction normalizeConfidence(value) {\r\n const parsed = Number(value);\r\n if (!Number.isFinite(parsed)) return DEFAULT_CONFIDENCE;\r\n return Math.max(0, Math.min(1, parsed));\r\n}\r\n\r\nfunction normalizeIssues(issues) {\r\n if (!Array.isArray(issues)) return [];\r\n return issues\r\n .map((issue) => {\r\n if (!issue) return null;\r\n const severity = String(issue.severity || \"info\").toLowerCase();\r\n return {\r\n severity,\r\n message: String(issue.message || \"\"),\r\n path: issue.path ? String(issue.path) : \"\",\r\n };\r\n })\r\n .filter((issue) => issue && issue.message);\r\n}\r\n\r\nexport function createImportResult(input = {}) {\r\n const source = String(input.source || \"unknown\");\r\n const type = String(input.type || \"generic\");\r\n const confidence = normalizeConfidence(input.confidence);\r\n const issues = normalizeIssues(input.issues);\r\n const designPatch =\r\n input.designPatch && typeof input.designPatch === \"object\"\r\n ? input.designPatch\r\n : {};\r\n const template =\r\n input.template && typeof input.template === \"object\" ? input.template : null;\r\n\r\n return {\r\n source,\r\n type,\r\n confidence,\r\n issues,\r\n designPatch,\r\n template,\r\n meta: input.meta && typeof input.meta === \"object\" ? input.meta : {},\r\n };\r\n}\r\n\r\nexport function isImportResult(value) {\r\n return Boolean(\r\n value &&\r\n typeof value === \"object\" &&\r\n \"source\" in value &&\r\n \"type\" in value &&\r\n \"confidence\" in value &&\r\n \"issues\" in value &&\r\n \"designPatch\" in value\r\n );\r\n}\r\n", "import { createImportResult } from \"./import-contract.js\";\r\n\r\nconst CATALOG_RELATIVE_URL = \"../templates/templates.json\";\r\nconst CATALOG_ABSOLUTE_URL = \"/assets/pds/templates/templates.json\";\r\nconst NODE_CWD_CATALOG = [\"public\", \"assets\", \"pds\", \"templates\", \"templates.json\"];\r\nconst NODE_PACKAGE_CATALOG_RELATIVE = [\"..\", \"..\", \"..\", \"public\", \"assets\", \"pds\", \"templates\", \"templates.json\"];\r\n\r\nlet catalogCache = null;\r\n\r\nfunction isNodeRuntime() {\r\n return Boolean(typeof process !== \"undefined\" && process?.versions?.node);\r\n}\r\n\r\nfunction normalizeTemplateMeta(template = {}) {\r\n return {\r\n id: String(template.id || \"\").trim(),\r\n name: String(template.name || template.id || \"Template\").trim(),\r\n description: String(template.description || \"\").trim(),\r\n icon: String(template.icon || \"layout\").trim(),\r\n file: String(template.file || \"\").trim(),\r\n tags: Array.isArray(template.tags) ? template.tags.map((item) => String(item)) : [],\r\n };\r\n}\r\n\r\nfunction normalizeCatalog(catalog = {}, sourceInfo = {}) {\r\n const templatesRaw = Array.isArray(catalog)\r\n ? catalog\r\n : Array.isArray(catalog?.templates)\r\n ? catalog.templates\r\n : [];\r\n\r\n const templates = templatesRaw\r\n .map(normalizeTemplateMeta)\r\n .filter((item) => item.id && item.file);\r\n\r\n return {\r\n version: catalog?.version || \"1\",\r\n templates,\r\n __catalogURL: sourceInfo.catalogURL || null,\r\n __catalogFilePath: sourceInfo.catalogFilePath || null,\r\n };\r\n}\r\n\r\nasync function loadCatalogFromBrowser(options = {}) {\r\n const configuredUrl = options.catalogURL || globalThis?.PDS?.currentConfig?.templateCatalogURL;\r\n const candidates = [configuredUrl, CATALOG_RELATIVE_URL, CATALOG_ABSOLUTE_URL].filter(Boolean);\r\n\r\n for (const candidate of candidates) {\r\n try {\r\n const url = new URL(candidate, import.meta.url).href;\r\n const response = await fetch(url, { credentials: \"same-origin\" });\r\n if (!response.ok) continue;\r\n const json = await response.json();\r\n return normalizeCatalog(json, { catalogURL: url });\r\n } catch (error) {}\r\n }\r\n\r\n return normalizeCatalog({ templates: [] });\r\n}\r\n\r\nasync function loadCatalogFromNode(options = {}) {\r\n const fsSpecifier = \"node:fs/promises\";\r\n const pathSpecifier = \"node:path\";\r\n const urlSpecifier = \"node:url\";\r\n const [{ readFile }, path, { fileURLToPath }] = await Promise.all([\r\n import(fsSpecifier),\r\n import(pathSpecifier),\r\n import(urlSpecifier),\r\n ]);\r\n\r\n const candidates = [];\r\n if (options.catalogPath) {\r\n candidates.push(path.resolve(options.catalogPath));\r\n }\r\n\r\n candidates.push(path.resolve(process.cwd(), ...NODE_CWD_CATALOG));\r\n\r\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\r\n candidates.push(path.resolve(moduleDir, ...NODE_PACKAGE_CATALOG_RELATIVE));\r\n\r\n for (const candidate of candidates) {\r\n try {\r\n const raw = await readFile(candidate, \"utf8\");\r\n const json = JSON.parse(raw);\r\n return normalizeCatalog(json, { catalogFilePath: candidate });\r\n } catch (error) {}\r\n }\r\n\r\n return normalizeCatalog({ templates: [] });\r\n}\r\n\r\nasync function readTemplateHtml(template, catalog) {\r\n if (!template?.file) return \"\";\r\n\r\n if (!isNodeRuntime()) {\r\n const baseUrl = catalog?.__catalogURL || CATALOG_ABSOLUTE_URL;\r\n const templateUrl = new URL(template.file, baseUrl).href;\r\n const response = await fetch(templateUrl, { credentials: \"same-origin\" });\r\n if (!response.ok) {\r\n throw new Error(`Template file not found: ${template.file}`);\r\n }\r\n return (await response.text()).trim();\r\n }\r\n\r\n const fsSpecifier = \"node:fs/promises\";\r\n const pathSpecifier = \"node:path\";\r\n const [{ readFile }, path] = await Promise.all([\r\n import(fsSpecifier),\r\n import(pathSpecifier),\r\n ]);\r\n const baseDir = catalog?.__catalogFilePath ? path.dirname(catalog.__catalogFilePath) : path.resolve(process.cwd(), \"public\", \"assets\", \"pds\", \"templates\");\r\n const templatePath = path.resolve(baseDir, template.file);\r\n return (await readFile(templatePath, \"utf8\")).trim();\r\n}\r\n\r\nexport async function loadLiveTemplateCatalog(options = {}) {\r\n if (catalogCache && !options.forceReload) return catalogCache;\r\n\r\n catalogCache = isNodeRuntime()\r\n ? await loadCatalogFromNode(options)\r\n : await loadCatalogFromBrowser(options);\r\n\r\n return catalogCache;\r\n}\r\n\r\nexport async function listLiveTemplates(options = {}) {\r\n const catalog = await loadLiveTemplateCatalog(options);\r\n return catalog.templates.map(({ id, name, description, icon, file, tags }) => ({\r\n id,\r\n name,\r\n description,\r\n icon,\r\n file,\r\n tags,\r\n }));\r\n}\r\n\r\nexport async function getLiveTemplateById(templateId, options = {}) {\r\n const catalog = await loadLiveTemplateCatalog(options);\r\n const template = catalog.templates.find((item) => item.id === templateId) || null;\r\n if (!template) return null;\r\n\r\n const html = await readTemplateHtml(template, catalog);\r\n return { ...template, html };\r\n}\r\n\r\nexport async function buildTemplateImportResult(templateId, options = {}) {\r\n const template = await getLiveTemplateById(templateId, options);\r\n if (!template) {\r\n return createImportResult({\r\n source: \"template\",\r\n type: \"template\",\r\n confidence: 0,\r\n issues: [{ severity: \"error\", message: `Unknown template: ${templateId}` }],\r\n });\r\n }\r\n\r\n return createImportResult({\r\n source: \"template\",\r\n type: \"template\",\r\n confidence: 1,\r\n template: {\r\n id: template.id,\r\n name: template.name,\r\n html: template.html,\r\n icon: template.icon,\r\n description: template.description,\r\n },\r\n });\r\n}\r\n", "{\r\n \"version\": \"tw2pds-layout-v4\",\r\n \"summary\": \"Deterministic Tailwind\u2192PDS conversion rules focused on layout intent, semantic primitive mapping, and richer import-* fallback coverage.\",\r\n \"governance\": [\r\n {\r\n \"id\": \"layout.utilities.grid\",\r\n \"controls\": [\"grid\", \"grid-cols-*\", \"grid-auto-*\"],\r\n \"note\": \"When false, grid mappings are skipped.\"\r\n },\r\n {\r\n \"id\": \"layout.utilities.flex\",\r\n \"controls\": [\"flex\", \"flex-*\", \"items-*\", \"justify-*\", \"grow\"],\r\n \"note\": \"When false, flex mappings are skipped.\"\r\n },\r\n {\r\n \"id\": \"layout.utilities.spacing\",\r\n \"controls\": [\"gap-*\", \"stack-*\"],\r\n \"note\": \"When false, spacing mappings are skipped.\"\r\n },\r\n {\r\n \"id\": \"layout.utilities.container\",\r\n \"controls\": [\"container\", \"max-w-*\"],\r\n \"note\": \"When false, container mappings are skipped.\"\r\n }\r\n ],\r\n \"nonPdsClassPatterns\": [\"^group(?:[/:].*)?$\", \"^layout-container$\"],\r\n \"neverFallbackTags\": [\"table\", \"thead\", \"tbody\", \"tfoot\", \"tr\", \"th\", \"td\", \"caption\", \"colgroup\", \"col\"],\r\n \"directMappings\": [\r\n { \"id\": \"layout.flex.base\", \"tw\": \"flex\", \"pds\": [\"flex\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.flex.inline\", \"tw\": \"inline-flex\", \"pds\": [\"flex\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.flex.row\", \"tw\": \"flex-row\", \"pds\": [\"flex-row\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.flex.col\", \"tw\": \"flex-col\", \"pds\": [\"flex-col\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.flex.wrap\", \"tw\": \"flex-wrap\", \"pds\": [\"flex-wrap\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.flex.grow\", \"tw\": \"grow\", \"pds\": [\"grow\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.flex.grow.tw\", \"tw\": \"flex-grow\", \"pds\": [\"grow\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.flex.grow1\", \"tw\": \"flex-1\", \"pds\": [\"grow\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.items.start\", \"tw\": \"items-start\", \"pds\": [\"items-start\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.items.center\", \"tw\": \"items-center\", \"pds\": [\"items-center\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.items.end\", \"tw\": \"items-end\", \"pds\": [\"items-end\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.items.stretch\", \"tw\": \"items-stretch\", \"pds\": [\"items-stretch\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.items.baseline\", \"tw\": \"items-baseline\", \"pds\": [\"items-baseline\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.justify.start\", \"tw\": \"justify-start\", \"pds\": [\"justify-start\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.justify.center\", \"tw\": \"justify-center\", \"pds\": [\"justify-center\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.justify.end\", \"tw\": \"justify-end\", \"pds\": [\"justify-end\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.justify.between\", \"tw\": \"justify-between\", \"pds\": [\"justify-between\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.justify.around\", \"tw\": \"justify-around\", \"pds\": [\"justify-around\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.justify.evenly\", \"tw\": \"justify-evenly\", \"pds\": [\"justify-evenly\"], \"gate\": \"flex\" },\r\n { \"id\": \"layout.grid.base\", \"tw\": \"grid\", \"pds\": [\"grid\"], \"gate\": \"grid\" },\r\n { \"id\": \"layout.grid.cols.1\", \"tw\": \"grid-cols-1\", \"pds\": [\"grid-cols-1\"], \"gate\": \"grid\" },\r\n { \"id\": \"layout.grid.cols.2\", \"tw\": \"grid-cols-2\", \"pds\": [\"grid-cols-2\"], \"gate\": \"grid\" },\r\n { \"id\": \"layout.grid.cols.3\", \"tw\": \"grid-cols-3\", \"pds\": [\"grid-cols-3\"], \"gate\": \"grid\" },\r\n { \"id\": \"layout.grid.cols.4\", \"tw\": \"grid-cols-4\", \"pds\": [\"grid-cols-4\"], \"gate\": \"grid\" },\r\n { \"id\": \"layout.grid.cols.6\", \"tw\": \"grid-cols-6\", \"pds\": [\"grid-cols-6\"], \"gate\": \"grid\" },\r\n { \"id\": \"layout.container\", \"tw\": \"container\", \"pds\": [\"container\"], \"gate\": \"container\" },\r\n { \"id\": \"intent.surface.shadow\", \"tw\": \"shadow\", \"pds\": [\"surface-elevated\"] },\r\n { \"id\": \"intent.surface.shadow-md\", \"tw\": \"shadow-md\", \"pds\": [\"surface-elevated\"] },\r\n { \"id\": \"intent.surface.shadow-lg\", \"tw\": \"shadow-lg\", \"pds\": [\"surface-elevated\"] },\r\n { \"id\": \"intent.surface.base\", \"tw\": \"bg-white\", \"pds\": [\"surface-base\"] },\r\n { \"id\": \"typography.align.center\", \"tw\": \"text-center\", \"pds\": [\"text-center\"] },\r\n { \"id\": \"typography.align.left\", \"tw\": \"text-left\", \"pds\": [\"text-left\"] },\r\n { \"id\": \"typography.align.right\", \"tw\": \"text-right\", \"pds\": [\"text-right\"] },\r\n { \"id\": \"typography.text.muted.gray500\", \"tw\": \"text-gray-500\", \"pds\": [\"text-muted\"] },\r\n { \"id\": \"typography.text.muted.slate500\", \"tw\": \"text-slate-500\", \"pds\": [\"text-muted\"] }\r\n ],\r\n \"ignoredPatterns\": [\r\n {\r\n \"id\": \"style.color\",\r\n \"pattern\": \"^(?:text|from|to|via|decoration|accent|caret)-|^bg-(?!cover$|center$|no-repeat$)\",\r\n \"reason\": \"Visual style token skipped in favor of semantic PDS styling.\"\r\n },\r\n {\r\n \"id\": \"style.radius-border-shadow\",\r\n \"pattern\": \"^(?:rounded|ring|border|shadow|outline)-?\",\r\n \"reason\": \"Surface/shape inferred at primitive level.\"\r\n },\r\n {\r\n \"id\": \"style.typography\",\r\n \"pattern\": \"^(?:font|leading|tracking|uppercase|lowercase|capitalize)-?\",\r\n \"reason\": \"Typography atomic utilities are skipped.\"\r\n },\r\n {\r\n \"id\": \"style.effects\",\r\n \"pattern\": \"^(?:opacity|blur|backdrop|drop-shadow|mix-blend|filter)-\",\r\n \"reason\": \"Visual effects skipped unless mapped to a PDS utility.\"\r\n },\r\n {\r\n \"id\": \"style.transitions\",\r\n \"pattern\": \"^(?:transition|duration|ease|delay|animate)-\",\r\n \"reason\": \"Motion is system-defined in PDS.\"\r\n },\r\n {\r\n \"id\": \"style.spacing.atomic\",\r\n \"pattern\": \"^(?:p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr)-\",\r\n \"reason\": \"Atomic spacing skipped; structural spacing intent is mapped.\"\r\n },\r\n {\r\n \"id\": \"style.positioning.atomic\",\r\n \"pattern\": \"^(?:absolute|relative|fixed|sticky|inset(?:-[xy])?|top|right|bottom|left|z|translate(?:-[xy])?|-translate-[xy])(?:-|$)\",\r\n \"reason\": \"Atomic positioning/offset utilities are skipped so PDS primitives and layout utilities control placement.\"\r\n }\r\n ],\r\n \"intentRules\": [\r\n {\r\n \"id\": \"intent.layout.responsive-grid-to-auto\",\r\n \"summary\": \"Collapse responsive grid-cols patterns (including base+md two-step patterns) to best-fit grid-auto-*\"\r\n },\r\n {\r\n \"id\": \"intent.layout.mobile-stack\",\r\n \"summary\": \"Map flex-col + md/lg:flex-row to mobile-stack\"\r\n },\r\n {\r\n \"id\": \"intent.component.card\",\r\n \"summary\": \"Infer card/surface classes from rounded+shadow+surface signals\"\r\n },\r\n {\r\n \"id\": \"intent.component.card.normalize\",\r\n \"summary\": \"Detect Tailwind card utility clusters and normalize them to PDS card and surface variants.\"\r\n },\r\n {\r\n \"id\": \"intent.component.button\",\r\n \"summary\": \"Infer btn-primary / btn-outline / icon-only from CTA patterns\"\r\n },\r\n {\r\n \"id\": \"intent.component.button.normalize\",\r\n \"summary\": \"Prevents import-* style classes on button-like elements and applies PDS button variants/sizes.\"\r\n },\r\n {\r\n \"id\": \"intent.component.button.layout-grow\",\r\n \"summary\": \"Preserve CTA row width intent on button-like elements by mapping w-full/flex-1 to grow.\"\r\n },\r\n {\r\n \"id\": \"intent.icon.color-preserve\",\r\n \"summary\": \"Preserve icon color intent by mapping Tailwind text color utilities on icon-like elements to tokenized import-* classes.\"\r\n },\r\n {\r\n \"id\": \"intent.component.badge.normalize\",\r\n \"summary\": \"Detects Tailwind badge/pill utility clusters and normalizes them to PDS badge primitives/variants.\"\r\n },\r\n {\r\n \"id\": \"intent.typography.heading-semantic\",\r\n \"summary\": \"Removes Tailwind heading typography/color utilities so heading semantics and PDS defaults control typography.\"\r\n },\r\n {\r\n \"id\": \"intent.surface.footer-inverse\",\r\n \"summary\": \"Use surface-inverse for footers with explicit background intent\"\r\n },\r\n {\r\n \"id\": \"intent.typography.link-treatment\",\r\n \"summary\": \"Apply minimal link treatment for hover/transition-tailwind anchors\"\r\n },\r\n {\r\n \"id\": \"intent.typography.link-active-preserve\",\r\n \"summary\": \"Preserve anchor text color intent (including active menu states) by mapping Tailwind text utilities to tokenized import-* classes.\"\r\n },\r\n {\r\n \"id\": \"intent.typography.metric-paragraph-to-div\",\r\n \"summary\": \"Normalize metric display lines from paragraph tags to div tags to avoid default paragraph margins in compact stat layouts.\"\r\n },\r\n {\r\n \"id\": \"intent.typography.metric-pair-no-stack\",\r\n \"summary\": \"When a compact metric container has two consecutive typography lines, remove stack-sm so spacing follows Tailwind preflight no-margin assumptions.\"\r\n },\r\n {\r\n \"id\": \"intent.typography.semantic-heading-from-scale\",\r\n \"summary\": \"Map large bold typography scales (text-2xl/text-3xl/text-4xl) to semantic heading tags when possible.\"\r\n },\r\n {\r\n \"id\": \"intent.typography.bold-to-strong\",\r\n \"summary\": \"Prefer semantic strong tags for bold inline text intent instead of utility-only font-weight classes.\"\r\n },\r\n {\r\n \"id\": \"intent.preflight.tailwind-runtime-detected\",\r\n \"summary\": \"Detect Tailwind runtime CSS injection and translate key preflight intent\"\r\n },\r\n {\r\n \"id\": \"intent.preflight.list-reset\",\r\n \"summary\": \"Preserve Tailwind list-reset preflight behavior via scoped fallback class\"\r\n },\r\n {\r\n \"id\": \"intent.preflight.anchor-reset\",\r\n \"summary\": \"Preserve Tailwind anchor reset preflight behavior via scoped fallback class\"\r\n },\r\n {\r\n \"id\": \"table.strict-tags.no-classes\",\r\n \"summary\": \"Never emit classes for semantic table tags (table/thead/tbody/tfoot/tr/th/td/caption/colgroup/col)\"\r\n },\r\n {\r\n \"id\": \"intent.form.nested-label\",\r\n \"summary\": \"Convert sibling label+control pairs into nested labels\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style\",\r\n \"summary\": \"Generate import-* classes + local style block for unmapped utility styles\"\r\n }\r\n ],\r\n \"gapScaleMap\": {\r\n \"gap-0\": \"gap-0\",\r\n \"gap-1\": \"gap-xs\",\r\n \"gap-2\": \"gap-sm\",\r\n \"gap-3\": \"gap-sm\",\r\n \"gap-4\": \"gap-md\",\r\n \"gap-5\": \"gap-md\",\r\n \"gap-6\": \"gap-lg\",\r\n \"gap-7\": \"gap-lg\",\r\n \"gap-8\": \"gap-xl\",\r\n \"gap-10\": \"gap-xl\",\r\n \"gap-12\": \"gap-xl\"\r\n },\r\n \"maxWidthMap\": {\r\n \"max-w-xs\": \"max-w-sm\",\r\n \"max-w-sm\": \"max-w-sm\",\r\n \"max-w-md\": \"max-w-md\",\r\n \"max-w-lg\": \"max-w-lg\",\r\n \"max-w-xl\": \"max-w-xl\",\r\n \"max-w-2xl\": \"max-w-xl\",\r\n \"max-w-3xl\": \"max-w-xl\",\r\n \"max-w-4xl\": \"max-w-xl\",\r\n \"max-w-5xl\": \"max-w-xl\",\r\n \"max-w-6xl\": \"max-w-xl\",\r\n \"max-w-7xl\": \"max-w-xl\"\r\n },\r\n \"tailwindSizeScale\": {\r\n \"0\": \"var(--spacing-0)\",\r\n \"0.5\": \"0.125rem\",\r\n \"1\": \"var(--spacing-1)\",\r\n \"1.5\": \"0.375rem\",\r\n \"2\": \"var(--spacing-2)\",\r\n \"2.5\": \"0.625rem\",\r\n \"3\": \"var(--spacing-3)\",\r\n \"3.5\": \"0.875rem\",\r\n \"4\": \"var(--spacing-4)\",\r\n \"5\": \"var(--spacing-5)\",\r\n \"6\": \"var(--spacing-6)\",\r\n \"7\": \"var(--spacing-7)\",\r\n \"8\": \"var(--spacing-8)\",\r\n \"9\": \"var(--spacing-9)\",\r\n \"10\": \"var(--spacing-10)\",\r\n \"11\": \"var(--spacing-11)\",\r\n \"12\": \"var(--spacing-12)\",\r\n \"14\": \"3.5rem\",\r\n \"16\": \"4rem\",\r\n \"20\": \"5rem\",\r\n \"24\": \"6rem\",\r\n \"28\": \"7rem\",\r\n \"32\": \"8rem\",\r\n \"36\": \"9rem\",\r\n \"40\": \"10rem\",\r\n \"48\": \"12rem\"\r\n },\r\n \"tailwindShadeScale\": [\"50\", \"100\", \"200\", \"300\", \"400\", \"500\", \"600\", \"700\", \"800\", \"900\"],\r\n \"defaultTailwindShade\": \"500\",\r\n \"importStyleRules\": {\r\n \"mx-auto\": \"margin-left:auto;margin-right:auto\",\r\n \"ml-auto\": \"margin-left:auto\",\r\n \"mr-auto\": \"margin-right:auto\",\r\n \"w-full\": \"width:100%\",\r\n \"w-auto\": \"width:auto\",\r\n \"h-full\": \"height:100%\",\r\n \"h-48\": \"height:12rem\",\r\n \"h-2.5\": \"height:0.625rem\",\r\n \"h-10\": \"height:var(--spacing-10)\",\r\n \"h-2\": \"height:var(--spacing-2)\",\r\n \"w-2\": \"width:var(--spacing-2)\",\r\n \"size-8\": \"width:var(--spacing-8);height:var(--spacing-8)\",\r\n \"size-10\": \"width:var(--spacing-10);height:var(--spacing-10)\",\r\n \"size-full\": \"width:100%;height:100%\",\r\n \"min-h-screen\": \"min-height:100vh\",\r\n \"overflow-hidden\": \"overflow:hidden\",\r\n \"overflow-x-hidden\": \"overflow-x:hidden\",\r\n \"overflow-x-auto\": \"overflow-x:auto\",\r\n \"whitespace-nowrap\": \"white-space:nowrap\",\r\n \"hidden\": \"display:none\",\r\n \"block\": \"display:block\",\r\n \"truncate\": \"overflow:hidden;text-overflow:ellipsis;white-space:nowrap\",\r\n \"justify-items-center\": \"justify-items:center\",\r\n \"justify-items-start\": \"justify-items:start\",\r\n \"justify-items-end\": \"justify-items:end\",\r\n \"justify-items-stretch\": \"justify-items:stretch\",\r\n \"grid-flow-col\": \"grid-auto-flow:column\",\r\n \"aspect-square\": \"aspect-ratio:1 / 1\",\r\n \"bg-center\": \"background-position:center\",\r\n \"bg-cover\": \"background-size:cover\",\r\n \"bg-no-repeat\": \"background-repeat:no-repeat\",\r\n \"transition-colors\": \"transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:150ms\"\r\n },\r\n \"importStyleDynamicRules\": [\r\n {\r\n \"id\": \"fallback.import-style.gap-scale\",\r\n \"pattern\": \"^gap-(\\\\d+)$\",\r\n \"summary\": \"Converts gap scale utilities (including responsive variants like md:gap-6) to generated import-* fallback classes.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.min-width-arbitrary\",\r\n \"pattern\": \"^min-w-\\\\[[^\\\\]]+\\\\]$\",\r\n \"summary\": \"Converts arbitrary min-width utilities (e.g. min-w-[600px]) to generated import-* fallback classes.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.max-width-arbitrary\",\r\n \"pattern\": \"^max-w-\\\\[[^\\\\]]+\\\\]$\",\r\n \"summary\": \"Converts arbitrary max-width utilities (e.g. max-w-[480px]) to generated import-* fallback classes.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.min-height-arbitrary\",\r\n \"pattern\": \"^min-h-\\\\[[^\\\\]]+\\\\]$\",\r\n \"summary\": \"Converts arbitrary min-height utilities (e.g. min-h-[180px]) to generated import-* fallback classes.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.grid-rows-arbitrary\",\r\n \"pattern\": \"^grid-rows-\\\\[[^\\\\]]+\\\\]$\",\r\n \"summary\": \"Converts arbitrary grid template row utilities (e.g. grid-rows-[1fr_auto]) to generated import-* fallback classes.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.size-scale\",\r\n \"pattern\": \"^size-(\\\\[[^\\\\]]+\\\\]|[0-9.]+)$\",\r\n \"summary\": \"Converts size scale/arbitrary utilities into width+height fallback declarations.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.width-height-scale\",\r\n \"pattern\": \"^[wh]-(\\\\[[^\\\\]]+\\\\]|[0-9.]+)$\",\r\n \"summary\": \"Converts width/height scale and arbitrary utilities to import-* classes.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.spacing\",\r\n \"pattern\": \"^-?(?:p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr)-(.+)$\",\r\n \"summary\": \"Converts spacing utilities to directional padding/margin fallback declarations, including responsive variants.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.text-size\",\r\n \"pattern\": \"^text-(xs|sm|base|lg|xl|2xl|3xl|4xl)$\",\r\n \"summary\": \"Converts common text size utilities to import-* font-size declarations.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.font-weight\",\r\n \"pattern\": \"^font-(normal|medium|semibold|bold|extrabold|black)$\",\r\n \"summary\": \"Converts common font weight utilities to import-* font-weight declarations.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.leading-tracking\",\r\n \"pattern\": \"^(leading|tracking)-(none|tight|snug|normal|relaxed|loose|tighter|wide|wider|widest)$\",\r\n \"summary\": \"Converts line-height and letter-spacing utilities to import-* declarations for typography fidelity.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.bg-tokenized\",\r\n \"pattern\": \"^bg-([a-z]+)-(\\\\d{2,3})$\",\r\n \"summary\": \"Safeguards Tailwind background color utilities by mapping families like blue/purple/green/red to PDS semantic tokens.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.bg-semantic\",\r\n \"pattern\": \"^bg-(primary|secondary|accent)$\",\r\n \"summary\": \"Safeguards semantic background utilities by mapping bg-primary/bg-secondary/bg-accent to PDS color tokens.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.text-tokenized\",\r\n \"pattern\": \"^text-([a-z]+)-(\\\\d{2,3})$\",\r\n \"summary\": \"Safeguards Tailwind text color utilities by mapping common families to PDS semantic tokens.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.rounded\",\r\n \"pattern\": \"^rounded(?:-[trbl]{1,2})?(?:-(none|xs|sm|md|lg|xl|2xl|3xl|full))?$\",\r\n \"summary\": \"Safeguards rounded utilities (including rounded-t-sm) by mapping to PDS radius tokens.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.overlay-alpha\",\r\n \"pattern\": \"^bg-black\\\\/(\\\\d{1,3})$\",\r\n \"summary\": \"Converts alpha black overlay classes (e.g. bg-black/50) to tokenized color-mix background overlays.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.text-inverse\",\r\n \"pattern\": \"^text-white$\",\r\n \"summary\": \"Preserves white foreground intent for text-on-image use cases using inverse-compatible tokens.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.bg-arbitrary\",\r\n \"pattern\": \"^bg-\\\\[[^\\\\]]+\\\\]$\",\r\n \"summary\": \"Converts arbitrary background colors to import-* fallback classes when values are CSS-safe.\"\r\n },\r\n {\r\n \"id\": \"fallback.import-style.text-arbitrary\",\r\n \"pattern\": \"^text-\\\\[[^\\\\]]+\\\\]$\",\r\n \"summary\": \"Converts arbitrary text colors to import-* fallback classes when values are CSS-safe.\"\r\n }\r\n ]\r\n}\r\n", "/// <reference path=\"./pds.d.ts\" />\n\n/**\n * Public PDS runtime object exported to consumers.\n *\n * This object exposes the core runtime building blocks for the Pure Design System.\n * It intentionally provides a small, stable surface area so consuming apps can:\n * - programmatically generate design system artifacts (via `getGenerator()` in live mode),\n * - adopt styles into Shadow DOM (via `adoptLayers` / `adoptPrimitives`),\n * - query runtime mode and obtain constructable stylesheets (via `registry`).\n *\n * Common events in the PDS ecosystem (emitted by other packages/components):\n * - `design-updated` \u2014 emitted by the designer component when the in-memory design changes (detail: { config }).\n * - `pds-generated` \u2014 emitted by the PDS configurator when generation completes (detail: { modules, meta }).\n * - `pds-error` \u2014 emitted by the PDS configurator when generation fails (detail: Error).\n *\n * Error handling notes:\n * - Methods that perform dynamic imports (e.g. `adoptLayers` via the registry) may log and return fallbacks\n * rather than throwing; consumers should check return values (e.g. null) and listen for `pds-error` in UI flows.\n * - `createStylesheet(css)` will throw synchronously if the provided CSS cannot be parsed by the browser's\n * `CSSStyleSheet.replaceSync()` \u2014 callers should guard invalid input or wrap calls in try/catch.\n *\n * @typedef {Object} PDSAPI\n * @property {import(\"./pds-core/pds-registry.js\").PDSRegistry} registry - Singleton runtime registry for live/static mode\n * @property {(generator?: import(\"./pds-core/pds-generator.js\").Generator) => void} applyStyles - Apply generated styles to the document (live-only)\n * @property {(shadowRoot: ShadowRoot, layers?: string[], additionalSheets?: CSSStyleSheet[]) => Promise<void>} adoptLayers - Adopt multiple layers into a ShadowRoot. May log errors and fallback to additionalSheets when static imports fail.\n * @property {(shadowRoot: ShadowRoot, additionalSheets?: CSSStyleSheet[]) => Promise<void>} adoptPrimitives - Adopt primitives layer into a ShadowRoot. Designed as a convenience for components.\n * @property {(css:string) => CSSStyleSheet} createStylesheet - Create a constructable stylesheet from CSS text. @throws {DOMException} on invalid CSS in some browsers.\n * @property {() => boolean} isLiveMode - Returns true when running in live/designer-backed mode\n * @property {() => Promise<typeof import(\"./pds-core/pds-generator.js\").Generator>} getGenerator - Live-only accessor for the Generator class\n * @property {(level: 'log'|'warn'|'error'|'debug'|'info', message?: any, ...data: any[]) => void} log - Unified logging entry point used by PDS internals and consumers\n */\nimport { PDS } from \"./pds-singleton.js\";\n\n// State properties\nif (typeof PDS.initializing !== \"boolean\") {\n PDS.initializing = false;\n}\nif (!(\"currentPreset\" in PDS)) {\n PDS.currentPreset = null;\n}\nif (typeof PDS.debug !== \"boolean\") {\n PDS.debug = false;\n}\nif (!(\"currentConfig\" in PDS)) {\n PDS.currentConfig = null;\n}\nif (!(\"compiled\" in PDS)) {\n PDS.compiled = null;\n}\nif (typeof PDS.logHandler !== \"function\") {\n PDS.logHandler = null;\n}\nif (!(\"mode\" in PDS)) {\n PDS.mode = null;\n}\n\nimport {\n adoptLayers,\n adoptPrimitives,\n createStylesheet,\n} from \"./pds-core/pds-runtime.js\";\nimport { registry } from \"./pds-core/pds-registry.js\";\nimport { enums } from \"./pds-core/pds-enums.js\";\nimport * as common from \"./common/common.js\";\nimport { resolvePublicAssetURL } from \"./pds-core/pds-paths.js\";\nimport {\n ensureAbsoluteAssetURL,\n ensureTrailingSlash,\n attachFoucListener,\n resolveRuntimeAssetRoot,\n resolveThemeAndApply,\n setupAutoDefinerAndEnhancers,\n} from \"./pds-core/pds-start-helpers.js\";\nimport {\n isPresetThemeCompatible,\n resolveThemePreference,\n} from \"./pds-core/pds-theme-utils.js\";\nimport { configurePDSLogger, pdsLog } from \"./common/pds-log.js\";\n\nlet __autoCompletePromise = null;\nlet __askPromise = null;\nlet __toastPromise = null;\nlet __defaultEnhancersPromise = null;\nlet __localizationPromise = null;\nlet __localizationRuntime = null;\n\nconst __LOCALIZATION_RUNTIME_SINGLETON_KEY__ = \"__pdsLocalizationRuntime\";\n\nfunction __getLocalizationRuntimeSync() {\n if (__localizationRuntime) {\n return __localizationRuntime;\n }\n\n const sharedRuntime = PDS?.[__LOCALIZATION_RUNTIME_SINGLETON_KEY__];\n if (sharedRuntime && typeof sharedRuntime === \"object\") {\n __localizationRuntime = sharedRuntime;\n return sharedRuntime;\n }\n\n return null;\n}\n\nfunction __setLocalizationRuntime(runtime) {\n const normalizedRuntime = runtime && typeof runtime === \"object\" ? runtime : null;\n __localizationRuntime = normalizedRuntime;\n PDS[__LOCALIZATION_RUNTIME_SINGLETON_KEY__] = normalizedRuntime;\n}\n\nconfigurePDSLogger({\n getLogger: () => (typeof PDS.logHandler === \"function\" ? PDS.logHandler : null),\n getContext: () => {\n const mode =\n PDS?.mode ||\n PDS?.compiled?.mode ||\n (PDS?.registry?.isLive ? \"live\" : \"static\");\n const debug =\n (PDS?.debug ||\n PDS?.currentConfig?.debug ||\n PDS?.currentConfig?.design?.debug ||\n PDS?.compiled?.debug ||\n PDS?.compiled?.design?.debug ||\n false) === true;\n return {\n mode,\n debug,\n thisArg: PDS,\n };\n },\n});\n\nPDS.log = (level = \"log\", message, ...data) => {\n pdsLog(level, message, ...data);\n};\n\nconst __fallbackLocalizationState = {\n locale: \"en\",\n messages: {},\n hasProvider: false,\n};\nconst __pendingLocalizationKeys = new Set();\n\nfunction __isStrTagged(template) {\n return (\n Boolean(template) &&\n typeof template !== \"string\" &&\n typeof template === \"object\" &&\n \"strTag\" in template\n );\n}\n\nfunction __collateStrings(strings = []) {\n let result = \"\";\n for (let index = 0; index <= strings.length - 1; index += 1) {\n result += strings[index];\n if (index < strings.length - 1) {\n result += `{${index}}`;\n }\n }\n return result;\n}\n\nfunction __replacePlaceholders(input, callback) {\n return String(input).replace(/\\{(\\d+)\\}/g, (_match, index) =>\n callback(Number(index))\n );\n}\n\nfunction __normalizeMessages(messages) {\n if (!messages || typeof messages !== \"object\") {\n return {};\n }\n\n const normalized = {};\n for (const [key, value] of Object.entries(messages)) {\n if (typeof value === \"string\") {\n normalized[key] = value;\n continue;\n }\n\n if (value && typeof value === \"object\" && typeof value.content === \"string\") {\n normalized[key] = value.content;\n }\n }\n return normalized;\n}\n\nfunction __fallbackStr(strings, ...values) {\n return {\n strTag: true,\n strings: Array.from(strings || []),\n values,\n raw: Array.from(strings?.raw || []),\n };\n}\n\nfunction __fallbackMsg(template) {\n if (!template) {\n return \"\";\n }\n\n if (__isStrTagged(template)) {\n const key = __collateStrings(template.strings || []);\n const translated = __fallbackLocalizationState.messages[key] || key;\n return __replacePlaceholders(translated, (index) => template.values?.[index]);\n }\n\n const key = String(template);\n return __fallbackLocalizationState.messages[key] || key;\n}\n\nfunction __queuePendingLocalizationKey(template) {\n if (!template) {\n return;\n }\n\n const key = __isStrTagged(template)\n ? __collateStrings(template.strings || [])\n : String(template);\n\n if (typeof key === \"string\" && key.length > 0) {\n __pendingLocalizationKeys.add(key);\n }\n}\n\nfunction __flushPendingLocalizationKeys(runtime) {\n if (\n !runtime ||\n typeof runtime.msg !== \"function\" ||\n __pendingLocalizationKeys.size === 0\n ) {\n return;\n }\n\n const pendingKeys = Array.from(__pendingLocalizationKeys);\n __pendingLocalizationKeys.clear();\n\n for (const key of pendingKeys) {\n try {\n runtime.msg(key);\n } catch {}\n }\n}\n\nasync function __loadLocalizationRuntime() {\n const runtime = __getLocalizationRuntimeSync();\n if (runtime) {\n return runtime;\n }\n\n if (!__localizationPromise) {\n const localizationModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-localization.js\"\n );\n\n __localizationPromise = import(/* @vite-ignore */ localizationModuleURL)\n .then((mod) => {\n if (\n typeof mod?.msg !== \"function\" ||\n typeof mod?.str !== \"function\" ||\n typeof mod?.configureLocalization !== \"function\" ||\n typeof mod?.loadLocale !== \"function\" ||\n typeof mod?.setLocale !== \"function\" ||\n typeof mod?.getLocalizationState !== \"function\"\n ) {\n throw new Error(\"Failed to load localization runtime exports\");\n }\n\n __setLocalizationRuntime(mod);\n __flushPendingLocalizationKeys(mod);\n return mod;\n })\n .catch((error) => {\n __localizationPromise = null;\n throw error;\n });\n }\n\n return __localizationPromise;\n}\n\nconst msg = (template, options = {}) => {\n const runtime = __getLocalizationRuntimeSync();\n if (typeof runtime?.msg === \"function\") {\n return runtime.msg(template, options);\n }\n __queuePendingLocalizationKey(template);\n return __fallbackMsg(template, options);\n};\n\nconst str = (strings, ...values) => {\n const runtime = __getLocalizationRuntimeSync();\n if (typeof runtime?.str === \"function\") {\n return runtime.str(strings, ...values);\n }\n return __fallbackStr(strings, ...values);\n};\n\nconst configureLocalization = (config = null) => {\n const runtime = __getLocalizationRuntimeSync();\n if (typeof runtime?.configureLocalization === \"function\") {\n return runtime.configureLocalization(config);\n }\n\n if (!config || typeof config !== \"object\") {\n __fallbackLocalizationState.locale = \"en\";\n __fallbackLocalizationState.messages = {};\n __fallbackLocalizationState.hasProvider = false;\n return {\n locale: __fallbackLocalizationState.locale,\n messages: { ...__fallbackLocalizationState.messages },\n hasProvider: __fallbackLocalizationState.hasProvider,\n };\n }\n\n if (typeof config.locale === \"string\" && config.locale.trim()) {\n __fallbackLocalizationState.locale = config.locale.trim();\n }\n\n if (Object.prototype.hasOwnProperty.call(config, \"messages\")) {\n __fallbackLocalizationState.messages = __normalizeMessages(config.messages);\n }\n\n const hasProvider = Boolean(\n config.provider ||\n config.translate ||\n config.loadLocale ||\n config.setLocale\n );\n __fallbackLocalizationState.hasProvider = hasProvider;\n\n if (hasProvider) {\n __loadLocalizationRuntime()\n .then((runtime) => {\n runtime.configureLocalization(config);\n __flushPendingLocalizationKeys(runtime);\n })\n .catch(() => {});\n }\n\n return {\n locale: __fallbackLocalizationState.locale,\n messages: { ...__fallbackLocalizationState.messages },\n hasProvider: __fallbackLocalizationState.hasProvider,\n };\n};\n\nconst loadLocale = async (locale) => {\n const runtime = await __loadLocalizationRuntime();\n return runtime.loadLocale(locale);\n};\n\nconst setLocale = async (locale, options = {}) => {\n const runtime = await __loadLocalizationRuntime();\n return runtime.setLocale(locale, options);\n};\n\nconst getLocalizationState = () => {\n const runtime = __getLocalizationRuntimeSync();\n if (typeof runtime?.getLocalizationState === \"function\") {\n return runtime.getLocalizationState();\n }\n return {\n locale: __fallbackLocalizationState.locale,\n messages: { ...__fallbackLocalizationState.messages },\n hasProvider: __fallbackLocalizationState.hasProvider,\n };\n};\n\nconst createJSONLocalization = (options = {}) => {\n const runtime = __getLocalizationRuntimeSync();\n if (typeof runtime?.createJSONLocalization === \"function\") {\n return runtime.createJSONLocalization(options);\n }\n\n const defaultLocale =\n typeof options?.locale === \"string\" && options.locale.trim()\n ? options.locale.trim().toLowerCase()\n : \"en\";\n\n const configuredLocales = Array.isArray(options?.locales)\n ? options.locales\n .map((locale) => String(locale || \"\").trim().toLowerCase())\n .filter(Boolean)\n : [];\n\n const locales = Array.from(new Set([defaultLocale, ...configuredLocales]));\n\n let __jsonLocalizationConfigPromise = null;\n const __resolveJSONLocalizationConfig = async () => {\n if (!__jsonLocalizationConfigPromise) {\n __jsonLocalizationConfigPromise = __loadLocalizationRuntime()\n .then((runtime) => {\n if (typeof runtime?.createJSONLocalization === \"function\") {\n return runtime.createJSONLocalization(options);\n }\n return null;\n })\n .catch(() => null);\n }\n\n return __jsonLocalizationConfigPromise;\n };\n\n const resolveLoader = async (kind = \"loadLocale\") => {\n const runtimeConfig = await __resolveJSONLocalizationConfig();\n if (!runtimeConfig || typeof runtimeConfig !== \"object\") {\n return null;\n }\n\n const provider = runtimeConfig.provider;\n if (!provider || typeof provider !== \"object\") {\n return null;\n }\n\n const exactLoader = provider[kind];\n if (typeof exactLoader === \"function\") {\n return exactLoader;\n }\n\n if (kind === \"setLocale\" && typeof provider.loadLocale === \"function\") {\n return provider.loadLocale;\n }\n\n return null;\n };\n\n return {\n locale: defaultLocale,\n locales: [...locales],\n provider: {\n locales: [...locales],\n async loadLocale(context = {}) {\n const loader = await resolveLoader(\"loadLocale\");\n if (typeof loader !== \"function\") {\n return {};\n }\n return loader(context);\n },\n async setLocale(context = {}) {\n const loader = await resolveLoader(\"setLocale\");\n if (typeof loader !== \"function\") {\n return {};\n }\n return loader(context);\n },\n },\n };\n};\n\nfunction __resolveExternalRuntimeModuleURL(filename, overrideURL) {\n if (overrideURL && typeof overrideURL === \"string\") {\n return overrideURL;\n }\n const assetRootURL = resolveRuntimeAssetRoot(PDS.currentConfig || {}, {\n resolvePublicAssetURL,\n });\n return `${assetRootURL}core/${filename}`;\n}\n\nasync function __loadDefaultEnhancers() {\n if (Array.isArray(PDS.defaultEnhancers) && PDS.defaultEnhancers.length > 0) {\n return PDS.defaultEnhancers;\n }\n if (!__defaultEnhancersPromise) {\n const enhancersModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-enhancers.js\",\n PDS.currentConfig?.enhancersURL\n );\n __defaultEnhancersPromise = import(/* @vite-ignore */ enhancersModuleURL)\n .then((mod) => {\n const enhancers = Array.isArray(mod?.defaultPDSEnhancers)\n ? mod.defaultPDSEnhancers\n : [];\n PDS.defaultEnhancers = enhancers;\n return enhancers;\n })\n .catch((error) => {\n __defaultEnhancersPromise = null;\n throw error;\n });\n }\n return __defaultEnhancersPromise;\n}\n\nasync function __loadAsk() {\n if (typeof PDS.ask === \"function\" && PDS.ask !== __lazyAsk) {\n return PDS.ask;\n }\n if (!__askPromise) {\n const askModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-ask.js\",\n PDS.currentConfig?.askURL\n );\n __askPromise = import(/* @vite-ignore */ askModuleURL)\n .then((mod) => {\n const impl = mod?.ask;\n if (typeof impl !== \"function\") {\n throw new Error(\"Failed to load ask helper\");\n }\n PDS.ask = impl;\n return impl;\n })\n .catch((error) => {\n __askPromise = null;\n throw error;\n });\n }\n return __askPromise;\n}\n\nasync function __loadToast() {\n if (typeof PDS.toast === \"function\" && PDS.toast !== __lazyToast) {\n return PDS.toast;\n }\n if (!__toastPromise) {\n const toastModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-toast.js\",\n PDS.currentConfig?.toastURL\n );\n __toastPromise = import(/* @vite-ignore */ toastModuleURL)\n .then((mod) => {\n const impl = mod?.toast;\n if (typeof impl !== \"function\") {\n throw new Error(\"Failed to load toast helper\");\n }\n PDS.toast = impl;\n return impl;\n })\n .catch((error) => {\n __toastPromise = null;\n throw error;\n });\n }\n return __toastPromise;\n}\n\nasync function __lazyAsk(...args) {\n const askImpl = await __loadAsk();\n return askImpl(...args);\n}\n\nasync function __lazyToast(...args) {\n const toastImpl = await __loadToast();\n return toastImpl(...args);\n}\n\n__lazyToast.success = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.success(...args);\n};\n__lazyToast.error = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.error(...args);\n};\n__lazyToast.warning = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.warning(...args);\n};\n__lazyToast.info = async (...args) => {\n const toastImpl = await __loadToast();\n return toastImpl.info(...args);\n};\n\nconst __defaultLog = function (level = \"log\", message, ...data) {\n PDS.log(level, message, ...data);\n};\n\nfunction __stripFunctionsForClone(value) {\n if (value === null || value === undefined) return value;\n if (typeof value === \"function\") return undefined;\n if (typeof value !== \"object\") return value;\n\n if (Array.isArray(value)) {\n return value\n .map((item) => __stripFunctionsForClone(item))\n .filter((item) => item !== undefined);\n }\n\n const result = {};\n for (const [key, entry] of Object.entries(value)) {\n const stripped = __stripFunctionsForClone(entry);\n if (stripped !== undefined) {\n result[key] = stripped;\n }\n }\n return result;\n}\n\nfunction __deepFreeze(value, seen = new WeakSet()) {\n if (!value || typeof value !== \"object\") {\n return value;\n }\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n Object.freeze(value);\n for (const key of Object.keys(value)) {\n __deepFreeze(value[key], seen);\n }\n return value;\n}\n\nfunction __toReadonlyClone(value) {\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value !== \"object\") {\n return value;\n }\n return __deepFreeze(structuredClone(__stripFunctionsForClone(value)));\n}\n\nasync function __loadRuntimeConfig(assetRootURL, config = {}) {\n if (config?.runtimeConfig === false) return null;\n if (typeof fetch !== \"function\") return null;\n const runtimeUrl =\n config?.runtimeConfigURL || `${assetRootURL}pds-runtime-config.json`;\n try {\n const res = await fetch(runtimeUrl, { cache: \"no-store\" });\n if (!res.ok) return null;\n return await res.json();\n } catch (e) {\n return null;\n }\n}\n\n/** Singleton runtime registry. Use `registry.setLiveMode()` to enable live mode or `registry.setStaticMode()` for static assets */\nPDS.registry = registry;\n\n/** Expose enums in static and live modes */\nPDS.enums = enums;\n\n/** Adopt a set of layered stylesheets into a ShadowRoot */\nPDS.adoptLayers = adoptLayers;\n\n/** Convenience to adopt only primitives into a ShadowRoot */\nPDS.adoptPrimitives = adoptPrimitives;\n\n/** Parse an HTML string into a NodeList */\nPDS.parse = common.parseHTML;\n\n/** Create a constructable CSSStyleSheet from a CSS string */\nPDS.createStylesheet = createStylesheet;\n\n/** Return true when running inside a live/designer-backed environment */\nPDS.isLiveMode = () => registry.isLive;\nPDS.ask = __lazyAsk;\nPDS.toast = __lazyToast;\nPDS.common = common;\nPDS.msg = msg;\nPDS.str = str;\nPDS.configureLocalization = configureLocalization;\nPDS.loadLocale = loadLocale;\nPDS.setLocale = setLocale;\nPDS.getLocalizationState = getLocalizationState;\nPDS.createJSONLocalization = createJSONLocalization;\nPDS.i18n = {\n msg,\n str,\n configure: configureLocalization,\n loadLocale,\n setLocale,\n getState: getLocalizationState,\n createJSONLocalization,\n};\nPDS.AutoComplete = null;\nPDS.loadAutoComplete = async () => {\n if (PDS.AutoComplete && typeof PDS.AutoComplete.connect === \"function\") {\n return PDS.AutoComplete;\n }\n\n const autoCompleteModuleURL = __resolveExternalRuntimeModuleURL(\n \"pds-autocomplete.js\",\n PDS.currentConfig?.autoCompleteURL\n );\n\n if (!__autoCompletePromise) {\n __autoCompletePromise = import(/* @vite-ignore */ autoCompleteModuleURL)\n .then((mod) => {\n const autoCompleteCtor =\n mod?.AutoComplete ||\n mod?.default?.AutoComplete ||\n mod?.default ||\n null;\n if (!autoCompleteCtor) {\n throw new Error(\"AutoComplete export not found in module\");\n }\n PDS.AutoComplete = autoCompleteCtor;\n return autoCompleteCtor;\n })\n .catch((error) => {\n __autoCompletePromise = null;\n throw error;\n });\n }\n return __autoCompletePromise;\n};\n\nfunction __emitPDSReady(detail) {\n const hasCustomEvent = typeof CustomEvent === \"function\";\n\n try {\n const readyEvent = hasCustomEvent\n ? new CustomEvent(\"pds:ready\", { detail })\n : new Event(\"pds:ready\");\n PDS.dispatchEvent(readyEvent);\n } catch (e) {}\n\n if (typeof document !== \"undefined\") {\n if (hasCustomEvent) {\n const eventOptions = { detail, bubbles: true, composed: true };\n try {\n document.dispatchEvent(new CustomEvent(\"pds:ready\", eventOptions));\n } catch (e) {}\n try {\n document.dispatchEvent(new CustomEvent(\"pds-ready\", eventOptions));\n } catch (e) {}\n } else {\n try {\n document.dispatchEvent(new Event(\"pds:ready\"));\n } catch (e) {}\n try {\n document.dispatchEvent(new Event(\"pds-ready\"));\n } catch (e) {}\n }\n }\n}\n\nfunction __emitPDSConfigChanged(detail = {}) {\n const hasCustomEvent = typeof CustomEvent === \"function\";\n const payload = {\n at: Date.now(),\n ...detail,\n };\n\n try {\n const changedEvent = hasCustomEvent\n ? new CustomEvent(\"pds:config-changed\", { detail: payload })\n : new Event(\"pds:config-changed\");\n PDS.dispatchEvent(changedEvent);\n } catch (e) {}\n\n if (typeof document !== \"undefined\") {\n if (hasCustomEvent) {\n const eventOptions = { detail: payload, bubbles: true, composed: true };\n try {\n document.dispatchEvent(\n new CustomEvent(\"pds:config-changed\", eventOptions)\n );\n } catch (e) {}\n } else {\n try {\n document.dispatchEvent(new Event(\"pds:config-changed\"));\n } catch (e) {}\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Theme management (centralized on PDS.theme)\n// Consumers may read/write `PDS.theme` with values: 'system' | 'light' | 'dark'\n// Setting the property persists to localStorage (when available), updates\n// document.documentElement[data-theme] to an explicit 'light'|'dark' value\n// and emits a `pds:theme:changed` event. Reading the property returns the\n// raw stored preference (or null if none).\n\n// Private module-level variables for theme management\nconst __themeStorageKey = \"pure-ds-theme\";\nlet __themeMQ = null;\nlet __themeMQListener = null;\n\n// Private: Apply resolved theme to document\nfunction __applyResolvedTheme(raw) {\n try {\n if (typeof document === \"undefined\") return;\n let resolved = \"light\";\n if (!raw) {\n // No stored preference: use OS preference\n const prefersDark =\n typeof window !== \"undefined\" &&\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n resolved = prefersDark ? \"dark\" : \"light\";\n } else if (raw === \"system\") {\n const prefersDark =\n typeof window !== \"undefined\" &&\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n resolved = prefersDark ? \"dark\" : \"light\";\n } else {\n resolved = raw;\n }\n document.documentElement.setAttribute(\"data-theme\", resolved);\n } catch (e) {}\n}\n\n// Private: Setup system theme change listener when needed\nfunction __setupSystemListenerIfNeeded(raw) {\n try {\n // Remove any existing listener first\n if (__themeMQ && __themeMQListener) {\n try {\n if (typeof __themeMQ.removeEventListener === \"function\")\n __themeMQ.removeEventListener(\"change\", __themeMQListener);\n else if (typeof __themeMQ.removeListener === \"function\")\n __themeMQ.removeListener(__themeMQListener);\n } catch (e) {}\n __themeMQ = null;\n __themeMQListener = null;\n }\n\n if (\n raw === \"system\" &&\n typeof window !== \"undefined\" &&\n window.matchMedia\n ) {\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const listener = (e) => {\n const isDark = e?.matches === undefined ? mq.matches : e.matches;\n try {\n const newTheme = isDark ? \"dark\" : \"light\";\n document.documentElement.setAttribute(\"data-theme\", newTheme);\n PDS.dispatchEvent(\n new CustomEvent(\"pds:theme:changed\", {\n detail: { theme: newTheme, source: \"system\" },\n })\n );\n } catch (ex) {}\n };\n __themeMQ = mq;\n __themeMQListener = listener;\n if (typeof mq.addEventListener === \"function\")\n mq.addEventListener(\"change\", listener);\n else if (typeof mq.addListener === \"function\") mq.addListener(listener);\n }\n } catch (e) {}\n}\n\nconst __themeDescriptor = Object.getOwnPropertyDescriptor(PDS, \"theme\");\nif (!__themeDescriptor) {\n Object.defineProperty(PDS, \"theme\", {\n get() {\n try {\n if (typeof window === \"undefined\") return null;\n return localStorage.getItem(__themeStorageKey) || null;\n } catch (e) {\n return null;\n }\n },\n set(value) {\n try {\n if (typeof window === \"undefined\") return;\n const currentPreset = PDS.currentConfig?.design || null;\n const resolvedTheme = resolveThemePreference(value);\n if (currentPreset && !isPresetThemeCompatible(currentPreset, resolvedTheme)) {\n const presetName =\n currentPreset?.name ||\n PDS.currentPreset?.name ||\n PDS.currentConfig?.preset ||\n \"current preset\";\n PDS.log(\n \"warn\",\n `PDS theme \"${resolvedTheme}\" not supported by preset \"${presetName}\".`\n );\n PDS.dispatchEvent(\n new CustomEvent(\"pds:theme:blocked\", {\n detail: { theme: value, resolvedTheme, preset: presetName },\n })\n );\n return;\n }\n if (value === null || value === undefined) {\n localStorage.removeItem(__themeStorageKey);\n } else {\n localStorage.setItem(__themeStorageKey, value);\n }\n\n // Apply resolved (light/dark) value to document\n __applyResolvedTheme(value);\n // Setup system change listener only when 'system' is selected\n __setupSystemListenerIfNeeded(value);\n\n // Emit a notification with the raw preference (value may be 'system')\n PDS.dispatchEvent(\n new CustomEvent(\"pds:theme:changed\", {\n detail: { theme: value, source: \"api\" },\n })\n );\n } catch (e) {}\n },\n });\n}\n\n// ----------------------------------------------------------------------------\n// Default Enhancers \u2014 first-class citizens alongside AutoDefiner\n// ----------------------------------------------------------------------------\n/**\n * Default DOM enhancers shipped with PDS. These are lightweight progressive\n * enhancements that can be applied to vanilla markup. Consumers can override\n * or add to these via the `enhancers` option of PDS.start({ mode }).\n */\nPDS.defaultEnhancers = [];\n\n/**\n * Initialize PDS in live mode with the given configuration (new unified shape).\n * Typically invoked via PDS.start({ mode: 'live', ... }).\n *\n * Shape:\n * PDS.start({\n * mode: 'live',\n * preset?: string,\n * design?: object,\n * autoDefine?: {\n * baseURL?: string,\n * predefine?: string[],\n * mapper?: (tag:string)=>string|undefined|null, // return undefined/null/false to let PDS default mapper handle it\n * // plus any AutoDefiner flags: scanExisting, observeShadows, patchAttachShadow, debounceMs, onError\n * },\n * // runtime flags (optional)\n * applyGlobalStyles?: boolean,\n * manageTheme?: boolean,\n * themeStorageKey?: string,\n * preloadStyles?: boolean,\n * criticalLayers?: string[]\n * })\n *\n * @param {object} config - The PDS configuration object (unified shape)\n * @returns {Promise<{generator: Generator, config: object, theme: string, autoDefiner?: any}>}\n *\n * @example\n * await PDS.start({ mode: 'live',\n * preset: 'paper-and-ink',\n * design: { colors: { accent: '#FF4081' } },\n * autoDefine: { predefine: ['pds-icon'] }\n * });\n */\n\n/**\n * Start PDS given a unified configuration and an explicit mode.\n *\n * @param {object} config - Unified configuration\n * @param {('live'|'static')} [config.mode='live'] - Runtime mode selector\n * @returns {Promise<any>} Live returns { generator, config, theme, autoDefiner }; Static returns { config, theme, autoDefiner }\n */\nasync function start(config) {\n PDS.initializing = true;\n try {\n const mode = (config && config.mode) || \"live\";\n const { mode: _omit, ...rest } = config || {};\n\n PDS.mode = mode;\n PDS.logHandler = typeof rest?.log === \"function\" ? rest.log : null;\n\n PDS.currentConfig = __toReadonlyClone(rest);\n\n const localizationConfig =\n rest && typeof rest.localization === \"object\" && rest.localization\n ? rest.localization\n : null;\n\n if (localizationConfig) {\n await __loadLocalizationRuntime();\n configureLocalization(localizationConfig);\n } else {\n configureLocalization(null);\n }\n\n let startResult;\n if (mode === \"static\") {\n startResult = await staticInit(rest);\n } else {\n const { localization: _managerLocalization, ...managerConfig } = rest || {};\n const assetRootURL = resolveRuntimeAssetRoot(managerConfig, { resolvePublicAssetURL });\n const managerUrl =\n managerConfig?.managerURL ||\n managerConfig?.public?.managerURL ||\n managerConfig?.manager?.url ||\n new URL(\"core/pds-manager.js\", assetRootURL).href ||\n new URL(\"./pds-manager.js\", import.meta.url).href;\n const { startLive } = await import(/* @vite-ignore */ managerUrl);\n startResult = await startLive(PDS, managerConfig, {\n emitReady: __emitPDSReady,\n emitConfigChanged: __emitPDSConfigChanged,\n applyResolvedTheme: __applyResolvedTheme,\n setupSystemListenerIfNeeded: __setupSystemListenerIfNeeded,\n });\n }\n\n PDS.compiled = __toReadonlyClone(startResult?.config || null);\n\n const resolvedExternalIconPath =\n PDS?.compiled?.design?.icons?.externalPath || \"/assets/img/icons/\";\n\n PDS.log(\"info\", `startup ready; external icon path: ${resolvedExternalIconPath}`);\n\n return startResult;\n } finally {\n PDS.initializing = false;\n }\n}\n\n/** Primary unified entry point */\nPDS.start = start;\n\n/**\n * Initialize PDS in static mode with the same unified configuration shape as live mode.\n *\n * Shape:\n * PDS.start({\n * mode: 'static',\n * preset?: string,\n * design?: object,\n * autoDefine?: {\n * baseURL?: string,\n * predefine?: string[],\n * mapper?: (tag:string)=>string,\n * // plus any AutoDefiner flags\n * },\n * // static/runtime flags (optional)\n * applyGlobalStyles?: boolean,\n * manageTheme?: boolean,\n * themeStorageKey?: string,\n * staticPaths?: Record<string,string>\n * })\n */\nasync function staticInit(config) {\n if (!config || typeof config !== \"object\") {\n throw new Error(\n \"PDS.start({ mode: 'static', ... }) requires a valid configuration object\"\n );\n }\n\n const applyGlobalStyles = config.applyGlobalStyles ?? true;\n const manageTheme = config.manageTheme ?? true;\n const themeStorageKey = config.themeStorageKey ?? \"pure-ds-theme\";\n let staticPaths = config.staticPaths ?? {};\n const assetRootURL = resolveRuntimeAssetRoot(config, { resolvePublicAssetURL });\n const cfgAuto = (config && config.autoDefine) || null;\n let autoDefineBaseURL;\n if (cfgAuto && cfgAuto.baseURL) {\n autoDefineBaseURL = ensureTrailingSlash(\n ensureAbsoluteAssetURL(cfgAuto.baseURL, { preferModule: false })\n );\n } else {\n autoDefineBaseURL = `${assetRootURL}components/`;\n }\n const autoDefinePreload =\n (cfgAuto && Array.isArray(cfgAuto.predefine) && cfgAuto.predefine) || [];\n const autoDefineMapper =\n (cfgAuto && typeof cfgAuto.mapper === \"function\" && cfgAuto.mapper) || null;\n\n try {\n attachFoucListener(PDS);\n // 1) Theme\n const { resolvedTheme } = resolveThemeAndApply({\n manageTheme,\n themeStorageKey,\n applyResolvedTheme: __applyResolvedTheme,\n setupSystemListenerIfNeeded: __setupSystemListenerIfNeeded,\n });\n\n // Load runtime config for static assets; config metadata remains live-mode only\n const runtimeConfig = await __loadRuntimeConfig(assetRootURL, config);\n const userEnhancers = Array.isArray(config?.enhancers)\n ? config.enhancers\n : config?.enhancers && typeof config.enhancers === \"object\"\n ? Object.values(config.enhancers)\n : [];\n const resolvedConfig = runtimeConfig?.config\n ? {\n ...runtimeConfig.config,\n ...config,\n design: config?.design || runtimeConfig.config.design,\n preset: config?.preset || runtimeConfig.config.preset,\n }\n : { ...config };\n \n\n // 2) Derive static asset URLs from the normalized public root\n const baseStaticPaths = {\n tokens: `${assetRootURL}styles/pds-tokens.css.js`,\n primitives: `${assetRootURL}styles/pds-primitives.css.js`,\n components: `${assetRootURL}styles/pds-components.css.js`,\n utilities: `${assetRootURL}styles/pds-utilities.css.js`,\n styles: `${assetRootURL}styles/pds-styles.css.js`,\n };\n const runtimePaths = runtimeConfig?.paths || {};\n staticPaths = { ...baseStaticPaths, ...runtimePaths, ...staticPaths };\n\n // 3) Static mode registry\n PDS.registry.setStaticMode(staticPaths);\n\n // 4) Apply global static styles if requested\n if (applyGlobalStyles && typeof document !== \"undefined\") {\n try {\n // Always adopt from exported css.js modules so static mode loads from JS exports\n const stylesSheet = await PDS.registry.getStylesheet(\"styles\");\n if (stylesSheet) {\n // Tag and adopt alongside existing non-PDS sheets\n stylesSheet._pds = true;\n const others = (document.adoptedStyleSheets || []).filter(\n (s) => s._pds !== true\n );\n document.adoptedStyleSheets = [...others, stylesSheet];\n __emitPDSConfigChanged({\n mode: \"static\",\n source: \"static:styles-applied\",\n });\n }\n } catch (e) {\n __defaultLog.call(PDS, \"warn\", \"Failed to apply static styles:\", e);\n }\n }\n\n // 5) AutoDefiner + Enhancers\n let autoDefiner = null;\n let mergedEnhancers = [];\n try {\n const defaultPDSEnhancers = await __loadDefaultEnhancers();\n const res = await setupAutoDefinerAndEnhancers({\n autoDefineBaseURL,\n autoDefinePreload,\n autoDefineMapper,\n enhancers: userEnhancers,\n autoDefineOverrides: cfgAuto || null,\n autoDefinePreferModule: !(cfgAuto && cfgAuto.baseURL),\n }, { baseEnhancers: defaultPDSEnhancers });\n autoDefiner = res.autoDefiner;\n mergedEnhancers = res.mergedEnhancers || [];\n } catch (error) {\n __defaultLog.call(\n PDS,\n \"error\",\n \"\u274C Failed to initialize AutoDefiner/Enhancers (static):\",\n error\n );\n }\n\n PDS.compiled = __toReadonlyClone({\n mode: \"static\",\n ...resolvedConfig,\n theme: resolvedTheme,\n enhancers: mergedEnhancers,\n });\n\n // 6) Emit ready event (unified)\n __emitPDSReady({\n mode: \"static\",\n config: resolvedConfig,\n theme: resolvedTheme,\n autoDefiner,\n });\n return {\n config: resolvedConfig,\n theme: resolvedTheme,\n autoDefiner,\n };\n } catch (error) {\n PDS.dispatchEvent(new CustomEvent(\"pds:error\", { detail: { error } }));\n throw error;\n }\n}\n\n// Note: PDS.static is not exported. Use PDS.start({ mode: 'static', ... }).\n\n// Note: PDS object is not frozen to allow runtime properties like currentConfig\n// to be set during initialization. The config object itself is frozen for immutability.\n\nexport const applyResolvedTheme = __applyResolvedTheme;\nexport const setupSystemListenerIfNeeded = __setupSystemListenerIfNeeded;\nexport {\n PDS,\n msg,\n str,\n configureLocalization,\n loadLocale,\n setLocale,\n getLocalizationState,\n createJSONLocalization,\n};\n", "import { createImportResult } from \"./import-contract.js\";\r\nimport tailwindRulebookJson from \"./tailwind-conversion-rules.json\" with { type: \"json\" };\r\nimport { PDS } from \"../pds.js\";\r\n\r\nconst RULEBOOK_JSON_PATH = \"src/js/pds-live-manager/tailwind-conversion-rules.json\";\r\nconst BREAKPOINT_ORDER = [\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\r\n\r\nfunction hydrateRulebook(rawRulebook = {}) {\r\n const ignoredPatterns = Array.isArray(rawRulebook.ignoredPatterns)\r\n ? rawRulebook.ignoredPatterns.map((rule) => ({\r\n ...rule,\r\n pattern: rule?.pattern instanceof RegExp ? rule.pattern : new RegExp(String(rule?.pattern || \"\")),\r\n }))\r\n : [];\r\n\r\n const nonPdsClassPatterns = Array.isArray(rawRulebook.nonPdsClassPatterns)\r\n ? rawRulebook.nonPdsClassPatterns.map((pattern) => (\r\n pattern instanceof RegExp ? pattern : new RegExp(String(pattern || \"\"))\r\n ))\r\n : [];\r\n\r\n return {\r\n ...rawRulebook,\r\n ignoredPatterns,\r\n nonPdsClassPatterns,\r\n };\r\n}\r\n\r\nexport const TAILWIND_TO_PDS_RULES = hydrateRulebook(tailwindRulebookJson);\r\nconst RULEBOOK_VERSION = TAILWIND_TO_PDS_RULES.version || \"tw2pds-layout-v4\";\r\n\r\nconst DIRECT_MAP = new Map(\r\n TAILWIND_TO_PDS_RULES.directMappings.map((rule) => [rule.tw, rule])\r\n);\r\n\r\nconst GAP_MAP = new Map(Object.entries(TAILWIND_TO_PDS_RULES.gapScaleMap || {}));\r\n\r\nconst MAX_WIDTH_MAP = new Map(Object.entries(TAILWIND_TO_PDS_RULES.maxWidthMap || {}));\r\n\r\nconst NON_PDS_CLASS_PATTERNS = TAILWIND_TO_PDS_RULES.nonPdsClassPatterns || [];\r\n\r\nconst TABLE_STRICT_TAGS = new Set(TAILWIND_TO_PDS_RULES.neverFallbackTags || []);\r\n\r\nconst IMPORT_STYLE_BASE_RULES = { ...(TAILWIND_TO_PDS_RULES.importStyleRules || {}) };\r\n\r\nconst TW_SIZE_SCALE = TAILWIND_TO_PDS_RULES.tailwindSizeScale || {};\r\n\r\nconst TW_SHADE_SCALE = Array.isArray(TAILWIND_TO_PDS_RULES.tailwindShadeScale)\r\n ? TAILWIND_TO_PDS_RULES.tailwindShadeScale.map((value) => String(value)).filter(Boolean)\r\n : [\"50\", \"100\", \"200\", \"300\", \"400\", \"500\", \"600\", \"700\", \"800\", \"900\"];\r\n\r\nconst DEFAULT_TW_SHADE = TW_SHADE_SCALE.includes(String(TAILWIND_TO_PDS_RULES.defaultTailwindShade || \"\"))\r\n ? String(TAILWIND_TO_PDS_RULES.defaultTailwindShade)\r\n : \"500\";\r\n\r\nconst DEFAULT_FONT_SCALE = 1.2;\r\n\r\nconst KNOWN_TW_PREFIXES = [\r\n \"container\",\r\n \"grid\",\r\n \"flex\",\r\n \"gap\",\r\n \"space\",\r\n \"items\",\r\n \"justify\",\r\n \"content\",\r\n \"place\",\r\n \"self\",\r\n \"col\",\r\n \"row\",\r\n \"w\",\r\n \"h\",\r\n \"min\",\r\n \"max\",\r\n \"p\",\r\n \"m\",\r\n \"rounded\",\r\n \"border\",\r\n \"ring\",\r\n \"outline\",\r\n \"shadow\",\r\n \"bg\",\r\n \"text\",\r\n \"font\",\r\n \"leading\",\r\n \"tracking\",\r\n \"uppercase\",\r\n \"lowercase\",\r\n \"capitalize\",\r\n \"overflow\",\r\n \"whitespace\",\r\n \"truncate\",\r\n \"object\",\r\n \"aspect\",\r\n \"opacity\",\r\n \"blur\",\r\n \"backdrop\",\r\n \"transition\",\r\n \"duration\",\r\n \"ease\",\r\n \"delay\",\r\n \"animate\",\r\n \"hidden\",\r\n \"block\",\r\n \"inline\",\r\n \"absolute\",\r\n \"relative\",\r\n \"fixed\",\r\n \"sticky\",\r\n \"size\",\r\n];\r\n\r\nfunction removeAttributeFromTagAttributes(attrs = \"\", name = \"\") {\r\n if (!attrs || !name) return attrs;\r\n const attrRegex = new RegExp(`\\\\s${name}\\\\s*=\\\\s*(\"[^\"]*\"|'[^']*'|[^\\\\s>]+)`, \"gi\");\r\n return String(attrs).replace(attrRegex, \"\");\r\n}\r\n\r\nfunction applyLabelNestingRule(sourceHtml = \"\", summary = null) {\r\n let html = String(sourceHtml || \"\");\r\n let nestingCount = 0;\r\n\r\n html = html.replace(\r\n /<label([^>]*?)\\sfor\\s*=\\s*([\"'])([^\"']+)\\2([^>]*)>([\\s\\S]*?)<\\/label>\\s*<(input)([^>]*?)\\sid\\s*=\\s*([\"'])([^\"']+)\\8([^>]*?)>/gi,\r\n (match, labelAttrsBefore, _q1, forValue, labelAttrsAfter, labelInner, inputTag, inputAttrsBefore, _q2, inputId, inputAttrsAfter) => {\r\n if (forValue !== inputId) return match;\r\n const nextLabelAttrs = removeAttributeFromTagAttributes(`${labelAttrsBefore || \"\"}${labelAttrsAfter || \"\"}`, \"for\");\r\n const inputMarkup = `<${inputTag}${inputAttrsBefore || \"\"} id=\"${inputId}\"${inputAttrsAfter || \"\"}>`;\r\n nestingCount += 1;\r\n return `<label${nextLabelAttrs}>${labelInner}${inputMarkup}</label>`;\r\n }\r\n );\r\n\r\n html = html.replace(\r\n /<label([^>]*?)\\sfor\\s*=\\s*([\"'])([^\"']+)\\2([^>]*)>([\\s\\S]*?)<\\/label>\\s*<(select|textarea)([^>]*?)\\sid\\s*=\\s*([\"'])([^\"']+)\\8([^>]*)>([\\s\\S]*?)<\\/\\6>/gi,\r\n (match, labelAttrsBefore, _q1, forValue, labelAttrsAfter, labelInner, controlTag, controlAttrsBefore, _q2, controlId, controlAttrsAfter, controlInner) => {\r\n if (forValue !== controlId) return match;\r\n const nextLabelAttrs = removeAttributeFromTagAttributes(`${labelAttrsBefore || \"\"}${labelAttrsAfter || \"\"}`, \"for\");\r\n const controlMarkup = `<${controlTag}${controlAttrsBefore || \"\"} id=\"${controlId}\"${controlAttrsAfter || \"\"}>${controlInner}</${controlTag}>`;\r\n nestingCount += 1;\r\n return `<label${nextLabelAttrs}>${labelInner}${controlMarkup}</label>`;\r\n }\r\n );\r\n\r\n if (summary && nestingCount > 0) {\r\n summary.labelNestingCount += nestingCount;\r\n addNote(summary, `Nested ${nestingCount} label/control pairs.`);\r\n recordRule(summary, \"intent.form.nested-label\");\r\n }\r\n\r\n return html;\r\n}\r\n\r\nfunction toImportClassName(token = \"\", breakpoint = \"base\") {\r\n const normalized = String(token || \"\")\r\n .toLowerCase()\r\n .replace(/[^a-z0-9]+/g, \"-\")\r\n .replace(/^-+|-+$/g, \"\") || \"rule\";\r\n\r\n const bpPart = breakpoint && breakpoint !== \"base\" ? `${breakpoint}-` : \"\";\r\n return `import-${bpPart}${normalized}`;\r\n}\r\n\r\nfunction registerImportStyle(summary, token, declaration, breakpoint = \"base\", pseudo = \"\") {\r\n if (!summary || !token || !declaration) return \"\";\r\n const className = toImportClassName(token, breakpoint);\r\n if (pseudo) {\r\n const pseudoBucketKey = `${breakpoint}|${pseudo}`;\r\n if (!summary.importPseudoStyles.has(pseudoBucketKey)) {\r\n summary.importPseudoStyles.set(pseudoBucketKey, new Map());\r\n }\r\n summary.importPseudoStyles.get(pseudoBucketKey).set(className, declaration);\r\n } else if (breakpoint === \"base\") {\r\n summary.importBaseStyles.set(className, declaration);\r\n } else {\r\n if (!summary.importResponsiveStyles.has(breakpoint)) {\r\n summary.importResponsiveStyles.set(breakpoint, new Map());\r\n }\r\n summary.importResponsiveStyles.get(breakpoint).set(className, declaration);\r\n }\r\n summary.importedStyleCount += 1;\r\n return className;\r\n}\r\n\r\nfunction normalizeArbitraryValue(raw = \"\") {\r\n return String(raw || \"\").trim().replace(/_/g, \" \");\r\n}\r\n\r\nfunction isSafeCssValue(value = \"\") {\r\n if (!value) return false;\r\n if (/[;{}]/.test(value)) return false;\r\n return /^[-#(),.%/\\sa-zA-Z0-9]+$/.test(value);\r\n}\r\n\r\nfunction resolveTailwindSizeValue(rawToken = \"\") {\r\n const token = String(rawToken || \"\").trim();\r\n if (!token) return null;\r\n\r\n const arbitrary = token.match(/^\\[([^\\]]+)\\]$/);\r\n if (arbitrary) {\r\n const value = normalizeArbitraryValue(arbitrary[1]);\r\n return isSafeCssValue(value) ? value : null;\r\n }\r\n\r\n return TW_SIZE_SCALE[token] || null;\r\n}\r\n\r\nfunction resolveTwShade(shade = \"\") {\r\n const parsed = Number(shade);\r\n if (!Number.isFinite(parsed)) return DEFAULT_TW_SHADE;\r\n\r\n const exact = String(parsed);\r\n if (TW_SHADE_SCALE.includes(exact)) return exact;\r\n\r\n return TW_SHADE_SCALE.reduce((closest, candidate) => {\r\n const closestDistance = Math.abs(Number(closest) - parsed);\r\n const candidateDistance = Math.abs(Number(candidate) - parsed);\r\n return candidateDistance < closestDistance ? candidate : closest;\r\n }, DEFAULT_TW_SHADE);\r\n}\r\n\r\nfunction mapTailwindColorToPdsColorVar(family = \"\", shade = \"500\") {\r\n const twFamily = String(family || \"\").toLowerCase();\r\n const mappedShade = resolveTwShade(shade);\r\n\r\n if ([\"blue\", \"sky\", \"indigo\", \"cyan\"].includes(twFamily)) {\r\n return `var(--color-primary-${mappedShade})`;\r\n }\r\n if ([\"purple\", \"violet\", \"fuchsia\"].includes(twFamily)) {\r\n return `var(--color-accent-${mappedShade})`;\r\n }\r\n if ([\"green\", \"emerald\", \"lime\", \"teal\"].includes(twFamily)) {\r\n return `var(--color-success-${mappedShade})`;\r\n }\r\n if ([\"yellow\", \"amber\", \"warning\"].includes(twFamily)) {\r\n return `var(--color-warning-${mappedShade})`;\r\n }\r\n if ([\"red\", \"rose\", \"pink\", \"orange\"].includes(twFamily)) {\r\n return `var(--color-danger-${mappedShade})`;\r\n }\r\n if ([\"slate\", \"gray\", \"zinc\", \"neutral\", \"stone\"].includes(twFamily)) {\r\n return `var(--color-gray-${mappedShade})`;\r\n }\r\n\r\n return \"\";\r\n}\r\n\r\nfunction resolveArbitraryColorValue(raw = \"\") {\r\n const value = normalizeArbitraryValue(raw);\r\n if (!isSafeCssValue(value)) return \"\";\r\n if (/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(value)) return value;\r\n if (/^(?:rgb|hsl)a?\\([^)]*\\)$/.test(value)) return value;\r\n return \"\";\r\n}\r\n\r\nfunction parseClassTokens(value = \"\") {\r\n return String(value || \"\")\r\n .split(/\\s+/)\r\n .map((token) => token.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nfunction withClassInAttrs(attrs = \"\", className = \"\") {\r\n if (!className) return attrs;\r\n const text = String(attrs || \"\");\r\n const classMatch = text.match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n if (!classMatch) {\r\n return `${text} class=\"${className}\"`;\r\n }\r\n\r\n const quote = classMatch[1] || '\"';\r\n const values = parseClassTokens(classMatch[2]);\r\n if (!values.includes(className)) values.push(className);\r\n const next = ` class=${quote}${values.join(\" \")}${quote}`;\r\n return text.replace(classMatch[0], next);\r\n}\r\n\r\nfunction hasAttribute(attrs = \"\", attr = \"\") {\r\n if (!attr) return false;\r\n return new RegExp(`\\\\s${attr}\\\\s*=`, \"i\").test(String(attrs || \"\"));\r\n}\r\n\r\nfunction humanizeIconName(iconName = \"\") {\r\n const text = String(iconName || \"\").replace(/[-_]+/g, \" \").trim();\r\n if (!text) return \"Icon button\";\r\n return text.replace(/(^|\\s)([a-z])/g, (_m, pre, ch) => `${pre}${ch.toUpperCase()}`);\r\n}\r\n\r\nfunction normalizeIconOnlyButtons(sourceHtml = \"\", summary = null) {\r\n const input = String(sourceHtml || \"\");\r\n if (!input) return input;\r\n\r\n return input.replace(\r\n /<(button|a)([^>]*)>\\s*(<pds-icon\\b[^>]*><\\/pds-icon>)\\s*<\\/\\1>/gi,\r\n (fullMatch, tagName, attrs, iconMarkup) => {\r\n let nextAttrs = withClassInAttrs(attrs, \"icon-only\");\r\n if (!hasAttribute(nextAttrs, \"aria-label\")) {\r\n const iconNameMatch = String(iconMarkup).match(/\\sicon\\s*=\\s*([\"'])(.*?)\\1/i);\r\n const iconName = iconNameMatch ? String(iconNameMatch[2] || \"\") : \"\";\r\n const label = humanizeIconName(iconName);\r\n nextAttrs += ` aria-label=\"${label}\"`;\r\n }\r\n\r\n if (summary) {\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.button.icon-only-markup\");\r\n }\r\n\r\n return `<${tagName}${nextAttrs}>${iconMarkup}</${tagName}>`;\r\n }\r\n );\r\n}\r\n\r\nfunction normalizeMetricTextParagraphs(sourceHtml = \"\", summary = null) {\r\n const input = String(sourceHtml || \"\");\r\n if (!input) return input;\r\n\r\n let convertedCount = 0;\r\n\r\n const output = input.replace(/<p([^>]*?)>([\\s\\S]*?)<\\/p>/gi, (fullMatch, attrs, inner) => {\r\n const classMatch = String(attrs || \"\").match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n if (!classMatch) return fullMatch;\r\n\r\n const classTokens = parseClassTokens(classMatch[2] || \"\");\r\n const hasImportText = classTokens.some((token) => /^import-text-/.test(String(token || \"\")));\r\n const isLikelyMetricLine = classTokens.includes(\"text-muted\") || classTokens.some((token) => /^import-font-/.test(String(token || \"\")));\r\n if (!hasImportText || !isLikelyMetricLine) return fullMatch;\r\n\r\n convertedCount += 1;\r\n return `<div${attrs}>${inner}</div>`;\r\n });\r\n\r\n if (summary && convertedCount > 0) {\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.typography.metric-paragraph-to-div\");\r\n addNote(summary, `Normalized ${convertedCount} metric text paragraph tag(s) to div.`);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction removeClassFromAttrs(attrs = \"\", className = \"\") {\r\n if (!className) return attrs;\r\n const text = String(attrs || \"\");\r\n const classMatch = text.match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n if (!classMatch) return text;\r\n\r\n const quote = classMatch[1] || '\"';\r\n const values = parseClassTokens(classMatch[2]).filter((token) => token !== className);\r\n if (values.length === 0) {\r\n return text.replace(classMatch[0], \"\");\r\n }\r\n\r\n const next = ` class=${quote}${values.join(\" \")}${quote}`;\r\n return text.replace(classMatch[0], next);\r\n}\r\n\r\nfunction updateClassTokensInAttrs(attrs = \"\", mapper = (tokens) => tokens) {\r\n const text = String(attrs || \"\");\r\n const classMatch = text.match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n if (!classMatch) return text;\r\n\r\n const quote = classMatch[1] || '\"';\r\n const currentTokens = parseClassTokens(classMatch[2]);\r\n const nextTokensRaw = mapper(Array.from(currentTokens));\r\n const nextTokens = Array.isArray(nextTokensRaw)\r\n ? nextTokensRaw.filter(Boolean)\r\n : currentTokens;\r\n\r\n if (nextTokens.length === 0) {\r\n return text.replace(classMatch[0], \"\");\r\n }\r\n\r\n const next = ` class=${quote}${nextTokens.join(\" \")}${quote}`;\r\n return text.replace(classMatch[0], next);\r\n}\r\n\r\nfunction normalizeMetricPairStackContainers(sourceHtml = \"\", summary = null) {\r\n const input = String(sourceHtml || \"\");\r\n if (!input) return input;\r\n\r\n let convertedCount = 0;\r\n\r\n const output = input.replace(\r\n /<(div|section|article|aside)([^>]*)>\\s*<(p|div)([^>]*)>[\\s\\S]*?<\\/\\3>\\s*<(p|div)([^>]*)>[\\s\\S]*?<\\/\\5>\\s*<\\/\\1>/gi,\r\n (fullMatch, tag, attrs, firstTag, firstAttrs, secondTag, secondAttrs) => {\r\n const classMatch = String(attrs || \"\").match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n if (!classMatch) return fullMatch;\r\n\r\n const containerClasses = parseClassTokens(classMatch[2]);\r\n if (!containerClasses.includes(\"stack-sm\")) return fullMatch;\r\n\r\n const firstClassMatch = String(firstAttrs || \"\").match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n const secondClassMatch = String(secondAttrs || \"\").match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n if (!firstClassMatch || !secondClassMatch) return fullMatch;\r\n\r\n const firstClasses = parseClassTokens(firstClassMatch[2]);\r\n const secondClasses = parseClassTokens(secondClassMatch[2]);\r\n const hasMetricTypographyPair =\r\n firstClasses.some((token) => /^import-text-/.test(String(token || \"\"))) &&\r\n secondClasses.some((token) => /^import-text-/.test(String(token || \"\")));\r\n\r\n if (!hasMetricTypographyPair) return fullMatch;\r\n\r\n const nextAttrs = removeClassFromAttrs(attrs, \"stack-sm\");\r\n convertedCount += 1;\r\n return fullMatch.replace(`<${tag}${attrs}>`, `<${tag}${nextAttrs}>`);\r\n }\r\n );\r\n\r\n if (summary && convertedCount > 0) {\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.typography.metric-pair-no-stack\");\r\n addNote(summary, `Removed stack-sm from ${convertedCount} metric text pair container(s).`);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction resolveTypographyFromConfig(configInput = {}) {\r\n if (!configInput || typeof configInput !== \"object\") return {};\r\n const directTypography = configInput.typography;\r\n if (directTypography && typeof directTypography === \"object\") {\r\n return directTypography;\r\n }\r\n const nestedTypography = configInput.design?.typography;\r\n if (nestedTypography && typeof nestedTypography === \"object\") {\r\n return nestedTypography;\r\n }\r\n return {};\r\n}\r\n\r\nfunction resolveFontScale(configInput = {}) {\r\n const typography = resolveTypographyFromConfig(configInput);\r\n const parsed = Number(typography.fontScale);\r\n if (!Number.isFinite(parsed)) return DEFAULT_FONT_SCALE;\r\n return Math.max(1, Math.min(2, parsed));\r\n}\r\n\r\nfunction resolveSemanticHeadingTag(sizeToken = \"\", fontScale = DEFAULT_FONT_SCALE) {\r\n const baseRankBySize = {\r\n \"4xl\": 1,\r\n \"3xl\": 2,\r\n \"2xl\": 3,\r\n xl: 4,\r\n };\r\n const baseRank = baseRankBySize[sizeToken];\r\n if (!baseRank) return \"\";\r\n\r\n const normalizedScale = Number.isFinite(Number(fontScale))\r\n ? Math.max(1, Math.min(2, Number(fontScale)))\r\n : DEFAULT_FONT_SCALE;\r\n const rankShift = Math.max(-1, Math.min(1, Math.round((normalizedScale - DEFAULT_FONT_SCALE) / 0.25)));\r\n const adjustedRank = baseRank - rankShift;\r\n if (adjustedRank < 1) return \"h1\";\r\n if (adjustedRank > 4) return \"\";\r\n return `h${adjustedRank}`;\r\n}\r\n\r\nfunction normalizeSemanticTypography(sourceHtml = \"\", summary = null, options = {}) {\r\n const input = String(sourceHtml || \"\");\r\n if (!input) return input;\r\n\r\n const fontScale = resolveFontScale(options.config || {});\r\n let headingCount = 0;\r\n let strongCount = 0;\r\n\r\n const output = input.replace(/<(p|div|span)([^>]*)>([\\s\\S]*?)<\\/\\1>/gi, (fullMatch, tag, attrs, inner) => {\r\n const classMatch = String(attrs || \"\").match(/\\sclass\\s*=\\s*([\"'])(.*?)\\1/i);\r\n if (!classMatch) return fullMatch;\r\n\r\n const classTokens = parseClassTokens(classMatch[2]);\r\n const hasImportBold = classTokens.includes(\"import-font-bold\");\r\n if (!hasImportBold) return fullMatch;\r\n\r\n const textSizeToken = classTokens.find((token) => /^import-text-(?:4xl|3xl|2xl|xl)$/.test(String(token || \"\"))) || \"\";\r\n const sizeMatch = textSizeToken.match(/^import-text-(4xl|3xl|2xl|xl)$/);\r\n\r\n if (sizeMatch) {\r\n const headingTag = resolveSemanticHeadingTag(sizeMatch[1], fontScale);\r\n if (!headingTag) {\r\n return fullMatch;\r\n }\r\n const nextAttrs = updateClassTokensInAttrs(attrs, (tokens) => (\r\n tokens.filter((token) => token !== \"import-font-bold\" && token !== textSizeToken)\r\n ));\r\n headingCount += 1;\r\n return `<${headingTag}${nextAttrs}>${inner}</${headingTag}>`;\r\n }\r\n\r\n const hasNestedBlock = /<\\/?(?:div|p|section|article|aside|main|header|footer|ul|ol|li|table|tr|td|th|h[1-6])\\b/i.test(inner);\r\n const alreadyStrong = /<\\/?(?:strong|b)\\b/i.test(inner);\r\n if (hasNestedBlock || alreadyStrong) return fullMatch;\r\n\r\n const nextAttrs = removeClassFromAttrs(attrs, \"import-font-bold\");\r\n strongCount += 1;\r\n return `<${tag}${nextAttrs}><strong>${inner}</strong></${tag}>`;\r\n });\r\n\r\n if (summary) {\r\n if (headingCount > 0) {\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.typography.semantic-heading-from-scale\");\r\n addNote(summary, `Converted ${headingCount} bold display text node(s) to semantic heading tags (fontScale=${Number(fontScale).toFixed(2)}).`);\r\n }\r\n if (strongCount > 0) {\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.typography.bold-to-strong\");\r\n addNote(summary, `Wrapped ${strongCount} bold text node(s) in strong tags.`);\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction resolvePseudoVariant(variants = []) {\r\n if (!Array.isArray(variants) || variants.length === 0) return \"\";\r\n const nonBreakpoint = variants.filter((variant) => !BREAKPOINT_ORDER.includes(variant));\r\n if (nonBreakpoint.length === 0) return \"\";\r\n if (nonBreakpoint.length > 1) return \"\";\r\n const candidate = nonBreakpoint[0];\r\n if ([\"hover\", \"focus\", \"active\"].includes(candidate)) return candidate;\r\n return \"\";\r\n}\r\n\r\nfunction resolveImportStyleToken(baseToken, breakpoint = \"base\", variants = []) {\r\n const pseudo = resolvePseudoVariant(variants);\r\n const declaration = IMPORT_STYLE_BASE_RULES[baseToken];\r\n if (declaration) {\r\n return {\r\n declaration,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style\",\r\n };\r\n }\r\n\r\n const gapMatch = String(baseToken).match(/^gap-(\\d+)$/);\r\n if (gapMatch) {\r\n const gapScale = {\r\n 0: \"var(--spacing-0)\",\r\n 1: \"var(--spacing-1)\",\r\n 2: \"var(--spacing-2)\",\r\n 3: \"var(--spacing-3)\",\r\n 4: \"var(--spacing-4)\",\r\n 5: \"var(--spacing-5)\",\r\n 6: \"var(--spacing-6)\",\r\n 7: \"var(--spacing-7)\",\r\n 8: \"var(--spacing-8)\",\r\n 10: \"var(--spacing-10)\",\r\n 12: \"var(--spacing-12)\",\r\n };\r\n const size = Number(gapMatch[1]);\r\n if (gapScale[size]) {\r\n return {\r\n declaration: `gap:${gapScale[size]}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.gap-scale\",\r\n };\r\n }\r\n }\r\n\r\n const marginMatch = String(baseToken).match(/^(mt|mb|my)-(.+)$/);\r\n if (marginMatch) {\r\n const axis = marginMatch[1];\r\n const rawValue = marginMatch[2];\r\n const value = resolveTailwindSizeValue(rawValue);\r\n if (value) {\r\n let marginDeclaration = \"\";\r\n if (axis === \"mt\") {\r\n marginDeclaration = `margin-top:${value}`;\r\n } else if (axis === \"mb\") {\r\n marginDeclaration = `margin-bottom:${value}`;\r\n } else {\r\n marginDeclaration = `margin-top:${value};margin-bottom:${value}`;\r\n }\r\n\r\n return {\r\n declaration: marginDeclaration,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.margin-scale\",\r\n };\r\n }\r\n }\r\n\r\n const minWidthArbitrary = String(baseToken).match(/^min-w-\\[([^\\]]+)\\]$/);\r\n if (minWidthArbitrary) {\r\n const value = normalizeArbitraryValue(minWidthArbitrary[1]);\r\n if (isSafeCssValue(value)) {\r\n return {\r\n declaration: `min-width:${value}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.min-width-arbitrary\",\r\n };\r\n }\r\n }\r\n\r\n const maxWidthArbitrary = String(baseToken).match(/^max-w-\\[([^\\]]+)\\]$/);\r\n if (maxWidthArbitrary) {\r\n const value = normalizeArbitraryValue(maxWidthArbitrary[1]);\r\n if (isSafeCssValue(value)) {\r\n return {\r\n declaration: `max-width:${value}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.max-width-arbitrary\",\r\n };\r\n }\r\n }\r\n\r\n const minHeightArbitrary = String(baseToken).match(/^min-h-\\[([^\\]]+)\\]$/);\r\n if (minHeightArbitrary) {\r\n const value = normalizeArbitraryValue(minHeightArbitrary[1]);\r\n if (isSafeCssValue(value)) {\r\n return {\r\n declaration: `min-height:${value}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.min-height-arbitrary\",\r\n };\r\n }\r\n }\r\n\r\n const gridRowsArbitrary = String(baseToken).match(/^grid-rows-\\[([^\\]]+)\\]$/);\r\n if (gridRowsArbitrary) {\r\n const value = normalizeArbitraryValue(gridRowsArbitrary[1]);\r\n if (isSafeCssValue(value)) {\r\n return {\r\n declaration: `grid-template-rows:${value}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.grid-rows-arbitrary\",\r\n };\r\n }\r\n }\r\n\r\n const sizeMatch = String(baseToken).match(/^size-(.+)$/);\r\n if (sizeMatch) {\r\n const value = resolveTailwindSizeValue(sizeMatch[1]);\r\n if (value) {\r\n return {\r\n declaration: `width:${value};height:${value}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.size-scale\",\r\n };\r\n }\r\n }\r\n\r\n const widthMatch = String(baseToken).match(/^w-(.+)$/);\r\n if (widthMatch) {\r\n const value = resolveTailwindSizeValue(widthMatch[1]);\r\n if (value) {\r\n return {\r\n declaration: `width:${value}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.width-scale\",\r\n };\r\n }\r\n }\r\n\r\n const heightMatch = String(baseToken).match(/^h-(.+)$/);\r\n if (heightMatch) {\r\n const value = resolveTailwindSizeValue(heightMatch[1]);\r\n if (value) {\r\n return {\r\n declaration: `height:${value}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.height-scale\",\r\n };\r\n }\r\n }\r\n\r\n const textSizeMap = {\r\n xs: \"var(--font-size-xs)\",\r\n sm: \"var(--font-size-sm)\",\r\n base: \"var(--font-size-md)\",\r\n lg: \"var(--font-size-lg)\",\r\n xl: \"var(--font-size-xl)\",\r\n \"2xl\": \"var(--font-size-2xl)\",\r\n \"3xl\": \"var(--font-size-3xl)\",\r\n \"4xl\": \"var(--font-size-4xl)\",\r\n };\r\n const textSizeMatch = String(baseToken).match(/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl)$/);\r\n if (textSizeMatch) {\r\n const size = textSizeMap[textSizeMatch[1]];\r\n return {\r\n declaration: `font-size:${size}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.text-size\",\r\n };\r\n }\r\n\r\n const fontWeightMap = {\r\n normal: \"400\",\r\n medium: \"500\",\r\n semibold: \"600\",\r\n bold: \"700\",\r\n extrabold: \"800\",\r\n black: \"900\",\r\n };\r\n const fontWeightMatch = String(baseToken).match(/^font-(normal|medium|semibold|bold|extrabold|black)$/);\r\n if (fontWeightMatch) {\r\n return {\r\n declaration: `font-weight:${fontWeightMap[fontWeightMatch[1]]}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.font-weight\",\r\n };\r\n }\r\n\r\n const lineHeightMap = {\r\n none: \"1\",\r\n tight: \"1.25\",\r\n snug: \"1.375\",\r\n normal: \"1.5\",\r\n relaxed: \"1.625\",\r\n loose: \"2\",\r\n };\r\n const lineHeightMatch = String(baseToken).match(/^leading-(none|tight|snug|normal|relaxed|loose)$/);\r\n if (lineHeightMatch) {\r\n return {\r\n declaration: `line-height:${lineHeightMap[lineHeightMatch[1]]}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.line-height\",\r\n };\r\n }\r\n\r\n const trackingMap = {\r\n tighter: \"-0.05em\",\r\n tight: \"-0.025em\",\r\n normal: \"0em\",\r\n wide: \"0.025em\",\r\n wider: \"0.05em\",\r\n widest: \"0.1em\",\r\n };\r\n const trackingMatch = String(baseToken).match(/^tracking-(tighter|tight|normal|wide|wider|widest)$/);\r\n if (trackingMatch) {\r\n return {\r\n declaration: `letter-spacing:${trackingMap[trackingMatch[1]]}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.tracking\",\r\n };\r\n }\r\n\r\n const bgBlackAlphaMatch = String(baseToken).match(/^bg-black\\/(\\d{1,3})$/);\r\n if (bgBlackAlphaMatch) {\r\n const alpha = Math.max(0, Math.min(100, Number(bgBlackAlphaMatch[1])));\r\n return {\r\n declaration: `background-color:color-mix(in srgb, var(--color-gray-900) ${alpha}%, transparent)`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.overlay-alpha\",\r\n };\r\n }\r\n\r\n if (baseToken === \"text-white\") {\r\n return {\r\n declaration: \"color:var(--color-gray-50)\",\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.text-inverse\",\r\n };\r\n }\r\n\r\n const semanticBgMatch = String(baseToken).match(/^bg-(primary|secondary|accent)$/);\r\n if (semanticBgMatch) {\r\n const semanticBgVarMap = {\r\n primary: \"var(--color-primary-fill)\",\r\n secondary: \"var(--color-gray-500)\",\r\n accent: \"var(--color-accent-500)\",\r\n };\r\n const colorVar = semanticBgVarMap[semanticBgMatch[1]];\r\n if (colorVar) {\r\n return {\r\n declaration: `background-color:${colorVar}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.bg-semantic\",\r\n };\r\n }\r\n }\r\n\r\n const bgColorMatch = String(baseToken).match(/^bg-([a-z]+)-(\\d{2,3})$/);\r\n if (bgColorMatch) {\r\n const colorVar = mapTailwindColorToPdsColorVar(bgColorMatch[1], bgColorMatch[2]);\r\n if (colorVar) {\r\n return {\r\n declaration: `background-color:${colorVar}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.bg-tokenized\",\r\n };\r\n }\r\n }\r\n\r\n const bgArbitraryMatch = String(baseToken).match(/^bg-\\[([^\\]]+)\\]$/);\r\n if (bgArbitraryMatch) {\r\n const colorValue = resolveArbitraryColorValue(bgArbitraryMatch[1]);\r\n if (colorValue) {\r\n return {\r\n declaration: `background-color:${colorValue}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.bg-arbitrary\",\r\n };\r\n }\r\n }\r\n\r\n const textColorMatch = String(baseToken).match(/^text-([a-z]+)-(\\d{2,3})$/);\r\n if (textColorMatch) {\r\n const colorVar = mapTailwindColorToPdsColorVar(textColorMatch[1], textColorMatch[2]);\r\n if (colorVar) {\r\n return {\r\n declaration: `color:${colorVar}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.text-tokenized\",\r\n };\r\n }\r\n }\r\n\r\n const textArbitraryMatch = String(baseToken).match(/^text-\\[([^\\]]+)\\]$/);\r\n if (textArbitraryMatch) {\r\n const colorValue = resolveArbitraryColorValue(textArbitraryMatch[1]);\r\n if (colorValue) {\r\n return {\r\n declaration: `color:${colorValue}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.text-arbitrary\",\r\n };\r\n }\r\n }\r\n\r\n const roundedMatch = String(baseToken).match(/^rounded(?:-([trbl]{1,2}))?(?:-(none|xs|sm|md|lg|xl|2xl|3xl|full))?$/);\r\n if (roundedMatch) {\r\n const corner = roundedMatch[1] || \"\";\r\n const size = roundedMatch[2] || \"sm\";\r\n const radiusValue = size === \"none\" ? \"0\" : `var(--radius-${size})`;\r\n const cornerMap = {\r\n t: [\"top-left\", \"top-right\"],\r\n b: [\"bottom-left\", \"bottom-right\"],\r\n l: [\"top-left\", \"bottom-left\"],\r\n r: [\"top-right\", \"bottom-right\"],\r\n tl: [\"top-left\"],\r\n tr: [\"top-right\"],\r\n bl: [\"bottom-left\"],\r\n br: [\"bottom-right\"],\r\n };\r\n\r\n if (!corner) {\r\n return {\r\n declaration: `border-radius:${radiusValue}`,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.rounded\",\r\n };\r\n }\r\n\r\n const targets = cornerMap[corner] || [];\r\n const declarationText = targets\r\n .map((targetCorner) => `border-${targetCorner}-radius:${radiusValue}`)\r\n .join(\";\");\r\n\r\n if (declarationText) {\r\n return {\r\n declaration: declarationText,\r\n breakpoint,\r\n pseudo,\r\n ruleId: \"fallback.import-style.rounded\",\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction formatBreakpointLength(value, fallbackPx) {\r\n if (typeof value === \"number\" && Number.isFinite(value)) return `${value}px`;\r\n if (typeof value === \"string\" && value.trim()) return value.trim();\r\n return `${fallbackPx}px`;\r\n}\r\n\r\nfunction resolveBreakpoints(configInput = {}) {\r\n const config = configInput?.design && typeof configInput.design === \"object\"\r\n ? configInput.design\r\n : configInput;\r\n\r\n const bp = config?.layout?.breakpoints || {};\r\n return {\r\n sm: formatBreakpointLength(bp.sm, 640),\r\n md: formatBreakpointLength(bp.md, 768),\r\n lg: formatBreakpointLength(bp.lg, 1024),\r\n xl: formatBreakpointLength(bp.xl, 1280),\r\n };\r\n}\r\n\r\nfunction generateImportStyleSheetText(summary, breakpoints) {\r\n const baseRules = Array.from(summary.importBaseStyles.entries()).map(\r\n ([className, declaration]) => `.${className}{${declaration};}`\r\n );\r\n\r\n const responsiveRules = [];\r\n for (const [bp, map] of summary.importResponsiveStyles.entries()) {\r\n const minWidth = breakpoints?.[bp];\r\n if (!minWidth || !map?.size) continue;\r\n const body = Array.from(map.entries())\r\n .map(([className, declaration]) => `.${className}{${declaration};}`)\r\n .join(\"\\n\");\r\n responsiveRules.push(`@media (min-width: ${minWidth}) {\\n${body}\\n}`);\r\n }\r\n\r\n for (const [bucketKey, map] of summary.importPseudoStyles.entries()) {\r\n const [bp, pseudo] = String(bucketKey).split(\"|\");\r\n if (!pseudo || !map?.size) continue;\r\n const body = Array.from(map.entries())\r\n .map(([className, declaration]) => `.${className}:${pseudo}{${declaration};}`)\r\n .join(\"\\n\");\r\n if (!body) continue;\r\n if (bp === \"base\") {\r\n responsiveRules.push(body);\r\n continue;\r\n }\r\n const minWidth = breakpoints?.[bp];\r\n if (!minWidth) continue;\r\n responsiveRules.push(`@media (min-width: ${minWidth}) {\\n${body}\\n}`);\r\n }\r\n\r\n const allRules = [...baseRules, ...responsiveRules].filter(Boolean).join(\"\\n\");\r\n if (!allRules.trim()) return \"\";\r\n\r\n return [\r\n \"/* pds-import: generated fallback styles for unmapped Tailwind utilities */\",\r\n allRules,\r\n ].join(\"\\n\");\r\n}\r\n\r\nfunction injectImportStyleBlock(html = \"\", cssText = \"\") {\r\n if (!cssText || !cssText.trim()) return html;\r\n const styleBlock = `<style data-pds-import=\"tailwind-fallback\">\\n${cssText}\\n</style>`;\r\n\r\n if (/<head[^>]*>/i.test(html)) {\r\n return html.replace(/<head([^>]*)>/i, `<head$1>\\n${styleBlock}`);\r\n }\r\n\r\n return `${styleBlock}\\n${html}`;\r\n}\r\n\r\nfunction isTailwindLike(token = \"\") {\r\n if (!token) return false;\r\n if (token.includes(\":\")) return true;\r\n if (token.includes(\"[\")) return true;\r\n const firstSegment = token.split(\"-\")[0];\r\n return KNOWN_TW_PREFIXES.includes(firstSegment);\r\n}\r\n\r\nfunction parseVariantToken(token = \"\") {\r\n const parts = String(token).split(\":\");\r\n if (parts.length === 1) {\r\n return { breakpoint: \"base\", base: parts[0], variants: [] };\r\n }\r\n const base = parts[parts.length - 1];\r\n const variants = parts.slice(0, -1);\r\n const breakpoint = variants.find((variant) => BREAKPOINT_ORDER.includes(variant)) || \"base\";\r\n return { breakpoint, base, variants };\r\n}\r\n\r\nfunction createConversionSummary() {\r\n return {\r\n totalTailwind: 0,\r\n mapped: 0,\r\n ignored: 0,\r\n policySkipped: 0,\r\n unknown: 0,\r\n intentHits: 0,\r\n unknownTokens: new Map(),\r\n notes: [],\r\n appliedRules: new Set(),\r\n importBaseStyles: new Map(),\r\n importResponsiveStyles: new Map(),\r\n importPseudoStyles: new Map(),\r\n importedStyleCount: 0,\r\n labelNestingCount: 0,\r\n removedAtomicSpacingCount: 0,\r\n removedAtomicPositioningCount: 0,\r\n };\r\n}\r\n\r\nfunction parseTailwindRuntimePreflightHints(cssText = \"\") {\r\n const compact = String(cssText || \"\")\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"\");\r\n\r\n const hasListReset =\r\n compact.includes(\"menu,ol,ul{list-style:none\") ||\r\n compact.includes(\"ol,ul,menu{list-style:none\") ||\r\n compact.includes(\"ul,ol,menu{list-style:none\");\r\n\r\n const hasAnchorReset = compact.includes(\"a{color:inherit;text-decoration:inherit\");\r\n\r\n return {\r\n listReset: hasListReset,\r\n anchorReset: hasAnchorReset,\r\n };\r\n}\r\n\r\nfunction parseTailwindRuntimeScriptHints(scriptSrc = \"\") {\r\n const src = String(scriptSrc || \"\").toLowerCase();\r\n const isTailwindCdn = src.includes(\"cdn.tailwindcss.com\");\r\n if (!isTailwindCdn) {\r\n return {\r\n listReset: false,\r\n anchorReset: false,\r\n };\r\n }\r\n\r\n return {\r\n listReset: true,\r\n anchorReset: true,\r\n };\r\n}\r\n\r\nfunction extractTailwindRuntimeContext(sourceHtml = \"\", summary = null) {\r\n let html = String(sourceHtml || \"\");\r\n const hints = {\r\n listReset: false,\r\n anchorReset: false,\r\n strippedRuntimeCssBlocks: 0,\r\n strippedRuntimeScripts: 0,\r\n };\r\n\r\n html = html.replace(/<style([^>]*)>([\\s\\S]*?)<\\/style>/gi, (fullMatch, attrs, cssBody) => {\r\n const cssText = String(cssBody || \"\");\r\n const isTailwindRuntime = /tailwindcss\\s+v\\d/i.test(cssText) || /\\*\\s*!\\s*tailwindcss/i.test(cssText);\r\n if (!isTailwindRuntime) return fullMatch;\r\n\r\n const parsedHints = parseTailwindRuntimePreflightHints(cssText);\r\n hints.listReset = hints.listReset || parsedHints.listReset;\r\n hints.anchorReset = hints.anchorReset || parsedHints.anchorReset;\r\n hints.strippedRuntimeCssBlocks += 1;\r\n return \"\";\r\n });\r\n\r\n html = html.replace(\r\n /<script([^>]*?)src\\s*=\\s*(?:(['\"])([^\"']*cdn\\.tailwindcss\\.com[^\"']*)\\2|([^\\s>]*cdn\\.tailwindcss\\.com[^\\s>]*))([^>]*)><\\/script>/gi,\r\n (_match, _before, _quote, quotedSrc, unquotedSrc) => {\r\n const scriptSrc = quotedSrc || unquotedSrc || \"\";\r\n const scriptHints = parseTailwindRuntimeScriptHints(scriptSrc);\r\n hints.listReset = hints.listReset || scriptHints.listReset;\r\n hints.anchorReset = hints.anchorReset || scriptHints.anchorReset;\r\n hints.strippedRuntimeScripts += 1;\r\n return \"\";\r\n }\r\n );\r\n\r\n if (summary && (hints.strippedRuntimeCssBlocks > 0 || hints.strippedRuntimeScripts > 0)) {\r\n recordRule(summary, \"intent.preflight.tailwind-runtime-detected\");\r\n if (hints.strippedRuntimeCssBlocks > 0) {\r\n addNote(\r\n summary,\r\n `Detected and stripped ${hints.strippedRuntimeCssBlocks} Tailwind runtime style block(s).`\r\n );\r\n }\r\n }\r\n\r\n if (summary && hints.strippedRuntimeScripts > 0) {\r\n addNote(\r\n summary,\r\n `Removed ${hints.strippedRuntimeScripts} Tailwind CDN script reference(s).`\r\n );\r\n }\r\n\r\n return { html, hints };\r\n}\r\n\r\nfunction addNote(summary, message) {\r\n if (!summary || !message) return;\r\n if (!summary.notes.includes(message)) {\r\n summary.notes.push(message);\r\n }\r\n}\r\n\r\nfunction addUnknownToken(summary, token) {\r\n const current = summary.unknownTokens.get(token) || 0;\r\n summary.unknownTokens.set(token, current + 1);\r\n}\r\n\r\nfunction resolveConversionPolicy(configInput = {}) {\r\n const config = configInput?.design && typeof configInput.design === \"object\"\r\n ? configInput.design\r\n : configInput;\r\n\r\n const utilities = config?.layout?.utilities || {};\r\n return {\r\n grid: utilities.grid !== false,\r\n flex: utilities.flex !== false,\r\n spacing: utilities.spacing !== false,\r\n container: utilities.container !== false,\r\n };\r\n}\r\n\r\nfunction allowsRule(policy, gate) {\r\n if (!gate) return true;\r\n return policy?.[gate] !== false;\r\n}\r\n\r\nfunction parseGridColumns(base) {\r\n const match = String(base).match(/^grid-cols-(\\d+)$/);\r\n if (!match) return null;\r\n return Number(match[1]);\r\n}\r\n\r\nfunction chooseGridAutoClass(gridByBreakpoint = {}) {\r\n const values = BREAKPOINT_ORDER\r\n .map((bp) => ({ bp, cols: gridByBreakpoint[bp] }))\r\n .filter((entry) => Number.isFinite(entry.cols));\r\n\r\n if (values.length < 2) return null;\r\n\r\n if (values.length === 2) {\r\n const [first, second] = values;\r\n const isClassicOneToTwo = first.bp === \"base\" && first.cols === 1 && second.cols === 2;\r\n if (isClassicOneToTwo) return \"grid-auto-lg\";\r\n\r\n const isBaseSingleToExplicitBreakpoint =\r\n first.bp === \"base\" && first.cols === 1 && second.cols >= 3;\r\n if (isBaseSingleToExplicitBreakpoint) return null;\r\n\r\n if (first.cols < second.cols) {\r\n if (second.cols >= 4) return \"grid-auto-md\";\r\n if (second.cols >= 2) return \"grid-auto-lg\";\r\n }\r\n\r\n return null;\r\n }\r\n\r\n let strictlyIncreasing = true;\r\n for (let index = 1; index < values.length; index += 1) {\r\n if (values[index].cols <= values[index - 1].cols) {\r\n strictlyIncreasing = false;\r\n break;\r\n }\r\n }\r\n\r\n if (!strictlyIncreasing) return null;\r\n\r\n const largest = values[values.length - 1]?.cols || 0;\r\n if (largest >= 4) return \"grid-auto-md\";\r\n if (largest >= 3) return \"grid-auto-sm\";\r\n return null;\r\n}\r\n\r\nfunction mapNeutralTextColorToSemanticClass(baseToken = \"\") {\r\n const match = String(baseToken).match(/^text-(gray|slate|zinc|neutral|stone)-(\\d{2,3})$/);\r\n if (!match) return \"\";\r\n const shade = Number(match[2]);\r\n if (!Number.isFinite(shade)) return \"\";\r\n if (shade >= 400 && shade <= 600) return \"text-muted\";\r\n return \"\";\r\n}\r\n\r\nfunction resolveResponsiveGridUtilityClass(breakpoint = \"\", cols = 0) {\r\n if (!breakpoint || !Number.isFinite(cols)) return \"\";\r\n const map = {\r\n sm: {\r\n 2: \"sm:grid-cols-2\",\r\n },\r\n md: {\r\n 3: \"md:grid-cols-3\",\r\n },\r\n lg: {\r\n 4: \"lg:grid-cols-4\",\r\n },\r\n };\r\n return map?.[breakpoint]?.[cols] || \"\";\r\n}\r\n\r\nfunction mapSpaceYTokenToStackClass(token = \"\") {\r\n const parsed = parseVariantToken(token);\r\n const base = String(parsed?.base || \"\");\r\n const sizeMatch = base.match(/^space-y-(\\d+)$/);\r\n if (!sizeMatch) return \"stack-md\";\r\n\r\n const step = Number(sizeMatch[1]);\r\n if (!Number.isFinite(step)) return \"stack-md\";\r\n if (step <= 1) return \"stack-xs\";\r\n if (step <= 2) return \"stack-sm\";\r\n if (step <= 4) return \"stack-md\";\r\n return \"stack-lg\";\r\n}\r\n\r\nfunction hasGapUtilityClass(mapped = new Set()) {\r\n return Array.from(mapped).some((className) => {\r\n const value = String(className || \"\");\r\n return (\r\n /^gap-(?:xs|sm|md|lg|xl)$/.test(value) ||\r\n /^gap-[0-9]+$/.test(value) ||\r\n /^import-(?:sm-|md-|lg-|xl-)?gap-/.test(value)\r\n );\r\n });\r\n}\r\n\r\nfunction hasStackUtilityClass(mapped = new Set()) {\r\n return Array.from(mapped).some((className) => /^stack-(?:xs|sm|md|lg|xl)$/.test(String(className || \"\")));\r\n}\r\n\r\nfunction hasGridSizingClass(mapped = new Set()) {\r\n return Array.from(mapped).some((className) => {\r\n const value = String(className || \"\");\r\n return (\r\n /^grid-cols-\\d+$/.test(value) ||\r\n /^grid-auto-(?:sm|md|lg|xl)$/.test(value) ||\r\n /^(?:sm|md|lg|xl):grid-cols-\\d+$/.test(value) ||\r\n /^import-(?:sm-|md-|lg-|xl-)?grid-cols-\\d+$/.test(value)\r\n );\r\n });\r\n}\r\n\r\nfunction listTopUnknownTokens(summary, limit = 12) {\r\n return Array.from(summary.unknownTokens.entries())\r\n .sort((a, b) => b[1] - a[1])\r\n .slice(0, limit)\r\n .map(([token]) => token);\r\n}\r\n\r\nfunction recordRule(summary, ruleId) {\r\n if (!summary || !ruleId) return;\r\n summary.appliedRules.add(ruleId);\r\n}\r\n\r\nfunction hasToken(sourceTokens = [], pattern) {\r\n if (!Array.isArray(sourceTokens) || !pattern) return false;\r\n return sourceTokens.some((token) => pattern.test(String(token)));\r\n}\r\n\r\nfunction parseTailwindButtonHeight(sourceTokens = []) {\r\n for (const token of sourceTokens) {\r\n const parsed = parseVariantToken(token);\r\n if (parsed.breakpoint !== \"base\") continue;\r\n const match = String(parsed.base).match(/^h-(.+)$/);\r\n if (!match) continue;\r\n const value = resolveTailwindSizeValue(match[1]);\r\n if (!value || value === \"auto\") continue;\r\n const pxMatch = String(value).match(/^(-?\\d+(?:\\.\\d+)?)rem$/);\r\n if (pxMatch) {\r\n const rem = Number(pxMatch[1]);\r\n if (Number.isFinite(rem)) return rem * 16;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction detectButtonIntent(sourceTokens = [], tagName = \"\") {\r\n const isNativeButton = tagName === \"button\";\r\n const hasBgSignal = hasToken(sourceTokens, /^bg-/);\r\n const hasHoverBgSignal = hasToken(sourceTokens, /^hover:bg-/);\r\n const hasBorderSignal = hasToken(sourceTokens, /^border/);\r\n const hasShadowSignal = hasToken(sourceTokens, /^shadow/);\r\n const hasCursorPointer = sourceTokens.includes(\"cursor-pointer\");\r\n const hasRoundedSignal = hasToken(sourceTokens, /^rounded/);\r\n const hasWidthSignal = hasToken(sourceTokens, /^(?:min-w|max-w|w)-/);\r\n const hasTextColorSignal = hasToken(sourceTokens, /^text-(?:white|black|\\[[^\\]]+\\]|[a-z]+-\\d{2,3})$/);\r\n const hasCtaSignal = hasBgSignal || hasHoverBgSignal || hasShadowSignal;\r\n const isAnchorButtonLike =\r\n tagName === \"a\" &&\r\n (hasCtaSignal || hasBorderSignal || hasCursorPointer || (hasRoundedSignal && hasWidthSignal));\r\n\r\n const shouldNormalize = isNativeButton || isAnchorButtonLike;\r\n if (!shouldNormalize) {\r\n return {\r\n shouldNormalize: false,\r\n variant: \"none\",\r\n size: \"base\",\r\n iconOnly: false,\r\n };\r\n }\r\n\r\n let variant = \"none\";\r\n if (hasBorderSignal && !hasBgSignal && !hasHoverBgSignal) {\r\n variant = \"outline\";\r\n } else if (hasCtaSignal || (hasBgSignal && hasTextColorSignal)) {\r\n variant = \"primary\";\r\n }\r\n\r\n const hasCompactIconSignal =\r\n sourceTokens.includes(\"rounded-full\") &&\r\n (sourceTokens.includes(\"p-2\") || sourceTokens.includes(\"p-1\") || sourceTokens.includes(\"p-2.5\"));\r\n const hasIconSizeSignal = hasToken(sourceTokens, /^size-(?:6|7|8|9|10|11|12)$/);\r\n const iconOnly = hasCompactIconSignal || hasIconSizeSignal;\r\n\r\n const buttonHeightPx = parseTailwindButtonHeight(sourceTokens);\r\n const hasSmallText = sourceTokens.includes(\"text-sm\") || sourceTokens.includes(\"text-xs\");\r\n const hasLargeText = sourceTokens.includes(\"text-lg\") || sourceTokens.includes(\"text-xl\");\r\n\r\n let size = \"base\";\r\n if ((buttonHeightPx && buttonHeightPx <= 40) || hasSmallText) {\r\n size = \"sm\";\r\n } else if ((buttonHeightPx && buttonHeightPx >= 48) || hasLargeText) {\r\n size = \"lg\";\r\n }\r\n\r\n return {\r\n shouldNormalize: true,\r\n variant,\r\n size,\r\n iconOnly,\r\n };\r\n}\r\n\r\nfunction mapBadgeVariantFromColorFamily(family = \"\") {\r\n const key = String(family || \"\").toLowerCase();\r\n if ([\"green\", \"emerald\", \"lime\", \"teal\"].includes(key)) return \"badge-success\";\r\n if ([\"blue\", \"sky\", \"cyan\", \"indigo\"].includes(key)) return \"badge-info\";\r\n if ([\"yellow\", \"amber\", \"orange\"].includes(key)) return \"badge-warning\";\r\n if ([\"red\", \"rose\", \"pink\"].includes(key)) return \"badge-danger\";\r\n if ([\"gray\", \"slate\", \"zinc\", \"neutral\", \"stone\"].includes(key)) return \"badge-secondary\";\r\n if ([\"purple\", \"violet\", \"fuchsia\", \"primary\", \"accent\"].includes(key)) return \"badge-primary\";\r\n return \"badge-secondary\";\r\n}\r\n\r\nfunction detectBadgeIntent(sourceTokens = [], tagName = \"\", buttonIntent = { shouldNormalize: false }) {\r\n if (buttonIntent?.shouldNormalize) {\r\n return {\r\n shouldNormalize: false,\r\n variantClass: \"\",\r\n outline: false,\r\n sizeClass: \"\",\r\n pastel: null,\r\n };\r\n }\r\n\r\n if ([\"button\", \"a\", \"input\", \"select\", \"textarea\"].includes(tagName)) {\r\n return {\r\n shouldNormalize: false,\r\n variantClass: \"\",\r\n outline: false,\r\n sizeClass: \"\",\r\n pastel: null,\r\n };\r\n }\r\n\r\n if (sourceTokens.some((token) => /^badge(?:-|$)/.test(String(token)))) {\r\n return {\r\n shouldNormalize: false,\r\n variantClass: \"\",\r\n outline: false,\r\n sizeClass: \"\",\r\n pastel: null,\r\n };\r\n }\r\n\r\n const baseTokens = sourceTokens\r\n .map((token) => parseVariantToken(token))\r\n .filter((parsed) => parsed.breakpoint === \"base\")\r\n .map((parsed) => String(parsed.base));\r\n\r\n const hasRounded = baseTokens.some((token) => /^rounded(?:-|$)/.test(token));\r\n const hasPx = baseTokens.some((token) => /^px-/.test(token));\r\n const hasPy = baseTokens.some((token) => /^py-/.test(token));\r\n const hasCompactPadding = hasPx && hasPy;\r\n const hasSmallText = baseTokens.includes(\"text-xs\") || baseTokens.includes(\"text-sm\");\r\n const hasLargeText = baseTokens.includes(\"text-lg\") || baseTokens.includes(\"text-xl\");\r\n\r\n const bgMatch = baseTokens\r\n .map((token) => token.match(/^bg-([a-z]+)-(\\d{2,3})(?:\\/\\d{1,3})?$/))\r\n .find(Boolean);\r\n const textMatch = baseTokens\r\n .map((token) => token.match(/^text-([a-z]+)-(\\d{2,3})(?:\\/\\d{1,3})?$/))\r\n .find(Boolean);\r\n const borderMatch = baseTokens\r\n .map((token) => token.match(/^border-([a-z]+)-(\\d{2,3})$/))\r\n .find(Boolean);\r\n\r\n const bgShade = Number(bgMatch?.[2]);\r\n const textShade = Number(textMatch?.[2]);\r\n const hasBgTone = Boolean(bgMatch && Number.isFinite(bgShade) && bgShade <= 300);\r\n const hasBorder = baseTokens.some((token) => /^border(?:-|$)/.test(token));\r\n const hasStatusColorSignal = Boolean(bgMatch || textMatch || borderMatch);\r\n\r\n const confidenceSignals = [hasRounded, hasCompactPadding, hasSmallText, hasBgTone || hasBorder].filter(Boolean).length;\r\n const shouldNormalize = hasStatusColorSignal && confidenceSignals >= 3;\r\n if (!shouldNormalize) {\r\n return {\r\n shouldNormalize: false,\r\n variantClass: \"\",\r\n outline: false,\r\n sizeClass: \"\",\r\n pastel: null,\r\n };\r\n }\r\n\r\n const family = (bgMatch && bgMatch[1]) || (textMatch && textMatch[1]) || (borderMatch && borderMatch[1]) || \"\";\r\n const mappedVariantClass = mapBadgeVariantFromColorFamily(family);\r\n const outline = hasBorder && !hasBgTone;\r\n const sizeClass = hasSmallText ? \"badge-sm\" : hasLargeText ? \"badge-lg\" : \"\";\r\n const pastel = hasBgTone\r\n ? {\r\n family,\r\n bgShade: Number.isFinite(bgShade) ? bgShade : 200,\r\n textShade: Number.isFinite(textShade) ? textShade : 700,\r\n }\r\n : null;\r\n const variantClass = pastel ? \"\" : mappedVariantClass;\r\n\r\n return {\r\n shouldNormalize: true,\r\n variantClass,\r\n outline,\r\n sizeClass,\r\n pastel,\r\n };\r\n}\r\n\r\nfunction mapTailwindBgFamilyToSurfaceClass(family = \"\", shade = 0) {\r\n const key = String(family || \"\").toLowerCase();\r\n const numericShade = Number(shade);\r\n\r\n if (key === \"white\") return \"surface-base\";\r\n if ([\"gray\", \"slate\", \"zinc\", \"neutral\", \"stone\"].includes(key)) {\r\n if (Number.isFinite(numericShade) && numericShade <= 100) return \"surface-base\";\r\n return \"surface-subtle\";\r\n }\r\n if ([\"blue\", \"sky\", \"cyan\", \"indigo\", \"primary\", \"info\"].includes(key)) return \"surface-info\";\r\n if ([\"purple\", \"violet\", \"fuchsia\", \"accent\"].includes(key)) return \"surface-primary\";\r\n if ([\"green\", \"emerald\", \"lime\", \"teal\", \"success\"].includes(key)) return \"surface-success\";\r\n if ([\"yellow\", \"amber\", \"orange\", \"warning\"].includes(key)) return \"surface-warning\";\r\n if ([\"red\", \"rose\", \"pink\", \"danger\"].includes(key)) return \"surface-danger\";\r\n return \"surface-base\";\r\n}\r\n\r\nfunction detectCardIntent(sourceTokens = [], tagName = \"\", buttonIntent = { shouldNormalize: false }, badgeIntent = { shouldNormalize: false }) {\r\n if (buttonIntent?.shouldNormalize || badgeIntent?.shouldNormalize) {\r\n return {\r\n shouldNormalize: false,\r\n cardVariantClass: \"\",\r\n surfaceClass: \"\",\r\n };\r\n }\r\n\r\n const validTags = new Set([\"div\", \"section\", \"article\", \"aside\", \"li\"]);\r\n if (!validTags.has(tagName)) {\r\n return {\r\n shouldNormalize: false,\r\n cardVariantClass: \"\",\r\n surfaceClass: \"\",\r\n };\r\n }\r\n\r\n if (sourceTokens.some((token) => /^card(?:-|$)/.test(String(token)))) {\r\n return {\r\n shouldNormalize: false,\r\n cardVariantClass: \"\",\r\n surfaceClass: \"\",\r\n };\r\n }\r\n\r\n const baseTokens = sourceTokens\r\n .map((token) => parseVariantToken(token))\r\n .filter((parsed) => parsed.breakpoint === \"base\")\r\n .map((parsed) => String(parsed.base));\r\n\r\n const hasRounded = baseTokens.some((token) => /^rounded(?:-|$)/.test(token));\r\n const hasBorder = baseTokens.some((token) => /^border(?:$|-)/.test(token));\r\n const hasShadow = baseTokens.some((token) => /^shadow(?:$|-)/.test(token));\r\n const hasPadding = baseTokens.some((token) => /^(?:p|px|py|pt|pb|pl|pr)-/.test(token));\r\n const bgMatch = baseTokens\r\n .map((token) => token.match(/^bg-([a-z]+)-?(\\d{2,3})?$/))\r\n .find(Boolean);\r\n const hasBackground = baseTokens.includes(\"bg-white\") || Boolean(bgMatch);\r\n\r\n const confidenceSignals = [hasRounded, hasBorder || hasShadow, hasBackground, hasPadding].filter(Boolean).length;\r\n const shouldNormalize = confidenceSignals >= 3;\r\n if (!shouldNormalize) {\r\n return {\r\n shouldNormalize: false,\r\n cardVariantClass: \"\",\r\n surfaceClass: \"\",\r\n };\r\n }\r\n\r\n let cardVariantClass = \"card-basic\";\r\n if (hasShadow) {\r\n cardVariantClass = \"card-elevated\";\r\n } else if (hasBorder) {\r\n cardVariantClass = \"card-outlined\";\r\n }\r\n\r\n let surfaceClass = \"\";\r\n if (hasShadow) {\r\n surfaceClass = \"surface-elevated\";\r\n } else if (bgMatch) {\r\n surfaceClass = mapTailwindBgFamilyToSurfaceClass(bgMatch[1], bgMatch[2]);\r\n } else if (hasBackground) {\r\n surfaceClass = \"surface-base\";\r\n }\r\n\r\n return {\r\n shouldNormalize: true,\r\n cardVariantClass,\r\n surfaceClass,\r\n };\r\n}\r\n\r\nfunction buildClassReplacement({\r\n tagName,\r\n originalClassValue,\r\n policy,\r\n summary,\r\n preflightHints = {},\r\n}) {\r\n if (TABLE_STRICT_TAGS.has(tagName)) {\r\n recordRule(summary, \"table.strict-tags.no-classes\");\r\n return \"\";\r\n }\r\n\r\n const sourceTokens = String(originalClassValue)\r\n .split(/\\s+/)\r\n .filter(Boolean);\r\n\r\n const buttonIntent = detectButtonIntent(sourceTokens, tagName);\r\n const badgeIntent = detectBadgeIntent(sourceTokens, tagName, buttonIntent);\r\n const cardIntent = detectCardIntent(sourceTokens, tagName, buttonIntent, badgeIntent);\r\n const isHeadingTag = /^h[1-6]$/.test(tagName);\r\n const isIconLikeElement =\r\n [\"i\", \"svg\"].includes(tagName) ||\r\n sourceTokens.some((token) => /^fa(?:[a-z-]+)?$/i.test(String(token || \"\")) || /^fa-/.test(String(token || \"\")));\r\n\r\n const mapped = new Set();\r\n const gridByBreakpoint = {};\r\n const flexByBreakpoint = {};\r\n let sawSpaceY = false;\r\n let firstSpaceYToken = \"\";\r\n let firstSpaceYStackClass = \"\";\r\n let sawSpaceX = false;\r\n let firstSpaceXToken = \"\";\r\n\r\n sourceTokens.forEach((token) => {\r\n const parsed = parseVariantToken(token);\r\n const base = parsed.base;\r\n\r\n if (NON_PDS_CLASS_PATTERNS.some((pattern) => pattern.test(base))) {\r\n summary.ignored += 1;\r\n recordRule(summary, \"cleanup.non-pds-class\");\r\n return;\r\n }\r\n\r\n const isTwToken = isTailwindLike(token) || isTailwindLike(base);\r\n\r\n if (isTwToken) {\r\n summary.totalTailwind += 1;\r\n }\r\n\r\n if (/^space-y-/.test(base)) {\r\n sawSpaceY = true;\r\n firstSpaceYToken = firstSpaceYToken || token;\r\n firstSpaceYStackClass = firstSpaceYStackClass || mapSpaceYTokenToStackClass(token);\r\n summary.ignored += 1;\r\n recordRule(summary, \"layout.spacing.space-y-to-stack\");\r\n return;\r\n }\r\n\r\n if (/^space-x-/.test(base)) {\r\n const sizeMatch = String(base).match(/^space-x-(\\d+)$/);\r\n if (sizeMatch) {\r\n const twGapToken = `gap-${sizeMatch[1]}`;\r\n const mappedGap = GAP_MAP.get(twGapToken);\r\n if (mappedGap && allowsRule(policy, \"spacing\")) {\r\n mapped.add(mappedGap);\r\n sawSpaceX = true;\r\n firstSpaceXToken = firstSpaceXToken || token;\r\n summary.mapped += 1;\r\n summary.intentHits += 1;\r\n recordRule(summary, \"layout.spacing.space-x-to-gap\");\r\n return;\r\n }\r\n }\r\n summary.ignored += 1;\r\n recordRule(summary, \"style.spacing.atomic\");\r\n return;\r\n }\r\n\r\n if (/^grid-cols-\\d+$/.test(base) && parsed.breakpoint !== \"base\") {\r\n const cols = parseGridColumns(base);\r\n if (Number.isFinite(cols) && allowsRule(policy, \"grid\")) {\r\n gridByBreakpoint[parsed.breakpoint] = cols;\r\n summary.mapped += 1;\r\n recordRule(summary, \"intent.layout.responsive-grid-to-auto\");\r\n return;\r\n }\r\n if (!allowsRule(policy, \"grid\")) {\r\n summary.policySkipped += 1;\r\n addNote(summary, \"Skipped responsive grid mapping because layout.utilities.grid=false.\");\r\n return;\r\n }\r\n }\r\n\r\n if (/^flex-(?:row|col)$/.test(base) && parsed.breakpoint !== \"base\") {\r\n if (allowsRule(policy, \"flex\")) {\r\n flexByBreakpoint[parsed.breakpoint] = base;\r\n summary.mapped += 1;\r\n recordRule(summary, \"intent.layout.mobile-stack\");\r\n return;\r\n }\r\n summary.policySkipped += 1;\r\n addNote(summary, \"Skipped responsive flex mapping because layout.utilities.flex=false.\");\r\n return;\r\n }\r\n\r\n if (/^grid-cols-\\d+$/.test(base) && parsed.breakpoint === \"base\") {\r\n const cols = parseGridColumns(base);\r\n if (Number.isFinite(cols) && allowsRule(policy, \"grid\")) {\r\n gridByBreakpoint.base = cols;\r\n }\r\n }\r\n\r\n const directRule = DIRECT_MAP.get(base);\r\n if (directRule && parsed.breakpoint === \"base\") {\r\n if (!allowsRule(policy, directRule.gate)) {\r\n summary.policySkipped += 1;\r\n addNote(summary, `Skipped ${base} because layout.utilities.${directRule.gate}=false.`);\r\n return;\r\n }\r\n directRule.pds.forEach((nextClass) => {\r\n if (nextClass) mapped.add(nextClass);\r\n });\r\n summary.mapped += 1;\r\n recordRule(summary, directRule.id);\r\n return;\r\n }\r\n\r\n if (GAP_MAP.has(base) && parsed.breakpoint === \"base\") {\r\n if (!allowsRule(policy, \"spacing\")) {\r\n summary.policySkipped += 1;\r\n addNote(summary, \"Skipped gap utility because layout.utilities.spacing=false.\");\r\n return;\r\n }\r\n mapped.add(GAP_MAP.get(base));\r\n summary.mapped += 1;\r\n recordRule(summary, \"layout.spacing.gap-scale\");\r\n return;\r\n }\r\n\r\n if (MAX_WIDTH_MAP.has(base) && parsed.breakpoint === \"base\") {\r\n if (!allowsRule(policy, \"container\")) {\r\n summary.policySkipped += 1;\r\n addNote(summary, \"Skipped max-width utility because layout.utilities.container=false.\");\r\n return;\r\n }\r\n mapped.add(MAX_WIDTH_MAP.get(base));\r\n summary.mapped += 1;\r\n recordRule(summary, \"layout.container.max-width\");\r\n return;\r\n }\r\n\r\n if (buttonIntent.shouldNormalize && isTwToken) {\r\n const parsedBase = String(base || \"\");\r\n\r\n if (parsed.breakpoint === \"base\" && [\"flex-1\", \"grow\", \"flex-grow\"].includes(parsedBase)) {\r\n mapped.add(\"grow\");\r\n summary.mapped += 1;\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.button.layout-grow\");\r\n return;\r\n }\r\n\r\n const buttonStyleTokenPattern =\r\n /^(?:bg-|text-(?!center$|left$|right$)|font-|leading-|tracking-|rounded|ring|border|shadow|outline|transition|duration|ease|delay|animate|p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr|w-|h-|min-|max-|size-|overflow)/;\r\n const skipNonStructuralButtonToken =\r\n buttonStyleTokenPattern.test(parsedBase) || parsedBase.startsWith(\"hover:\");\r\n\r\n if (skipNonStructuralButtonToken) {\r\n summary.ignored += 1;\r\n recordRule(summary, \"intent.component.button.normalize\");\r\n return;\r\n }\r\n }\r\n\r\n if (isHeadingTag) {\r\n const headingTypographyOrColorPattern =\r\n /^(?:text-(?:xs|sm|base|lg|xl|\\dxl|white|black|\\[[^\\]]+\\]|[a-z]+-\\d{2,3})|font-|leading-|tracking-|uppercase|lowercase|capitalize)/;\r\n if (headingTypographyOrColorPattern.test(base)) {\r\n summary.ignored += 1;\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.typography.heading-semantic\");\r\n return;\r\n }\r\n }\r\n\r\n if (badgeIntent.shouldNormalize && isTwToken) {\r\n const parsedBase = String(base || \"\");\r\n const badgeStyleTokenPattern =\r\n /^(?:bg-|text-(?!center$|left$|right$)|font-|leading-|tracking-|rounded|ring|border|shadow|outline|transition|duration|ease|delay|animate|p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr|w-|h-|min-|max-|size-|overflow)/;\r\n if (badgeStyleTokenPattern.test(parsedBase) || parsedBase.startsWith(\"hover:\")) {\r\n summary.ignored += 1;\r\n recordRule(summary, \"intent.component.badge.normalize\");\r\n return;\r\n }\r\n }\r\n\r\n if (cardIntent.shouldNormalize && isTwToken) {\r\n const parsedBase = String(base || \"\");\r\n const cardStyleTokenPattern =\r\n /^(?:bg-|text-(?!center$|left$|right$)|font-|leading-|tracking-|rounded|ring|border|shadow|outline|transition|duration|ease|delay|animate|p|px|py|pt|pb|pl|pr|m|mx|my|mt|mb|ml|mr)/;\r\n if (cardStyleTokenPattern.test(parsedBase) || parsedBase.startsWith(\"hover:\")) {\r\n summary.ignored += 1;\r\n recordRule(summary, \"intent.component.card.normalize\");\r\n return;\r\n }\r\n }\r\n\r\n const neutralTextSemanticClass = mapNeutralTextColorToSemanticClass(base);\r\n if (neutralTextSemanticClass && parsed.breakpoint === \"base\") {\r\n mapped.add(neutralTextSemanticClass);\r\n summary.mapped += 1;\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.typography.text-neutral-to-muted\");\r\n return;\r\n }\r\n\r\n const isTextColorToken = /^text-(?:white|black|[a-z]+-\\d{2,3}|\\[[^\\]]+\\])$/.test(base);\r\n if (isTextColorToken) {\r\n const shouldPreserveColorUtility =\r\n isIconLikeElement ||\r\n (tagName === \"a\" && !buttonIntent.shouldNormalize);\r\n\r\n if (shouldPreserveColorUtility) {\r\n const iconColorImportStyle = resolveImportStyleToken(base, parsed.breakpoint, parsed.variants);\r\n if (iconColorImportStyle) {\r\n const className = registerImportStyle(\r\n summary,\r\n `${tagName}-color-${base}`,\r\n iconColorImportStyle.declaration,\r\n iconColorImportStyle.breakpoint,\r\n iconColorImportStyle.pseudo\r\n );\r\n if (className) {\r\n mapped.add(className);\r\n summary.mapped += 1;\r\n summary.intentHits += 1;\r\n recordRule(summary, isIconLikeElement ? \"intent.icon.color-preserve\" : \"intent.typography.link-active-preserve\");\r\n return;\r\n }\r\n }\r\n }\r\n\r\n summary.ignored += 1;\r\n recordRule(summary, \"style.color\");\r\n return;\r\n }\r\n\r\n const importStyle = resolveImportStyleToken(base, parsed.breakpoint, parsed.variants);\r\n if (importStyle) {\r\n const className = registerImportStyle(\r\n summary,\r\n base,\r\n importStyle.declaration,\r\n importStyle.breakpoint,\r\n importStyle.pseudo\r\n );\r\n if (className) {\r\n mapped.add(className);\r\n summary.mapped += 1;\r\n summary.intentHits += 1;\r\n recordRule(summary, importStyle.ruleId);\r\n if (parsed.breakpoint !== \"base\") {\r\n addNote(summary, `Generated responsive import fallback for ${token}.`);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n for (const ignoreRule of TAILWIND_TO_PDS_RULES.ignoredPatterns) {\r\n if (ignoreRule.pattern.test(base)) {\r\n summary.ignored += 1;\r\n recordRule(summary, ignoreRule.id);\r\n if (ignoreRule.id === \"style.spacing.atomic\") {\r\n summary.removedAtomicSpacingCount += 1;\r\n }\r\n if (ignoreRule.id === \"style.positioning.atomic\") {\r\n summary.removedAtomicPositioningCount += 1;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n if (isTwToken) {\r\n summary.unknown += 1;\r\n addUnknownToken(summary, token);\r\n return;\r\n }\r\n\r\n mapped.add(token);\r\n });\r\n\r\n if (sawSpaceY && allowsRule(policy, \"spacing\")) {\r\n mapped.add(firstSpaceYStackClass || \"stack-md\");\r\n summary.mapped += 1;\r\n summary.intentHits += 1;\r\n addNote(summary, `Mapped ${firstSpaceYToken} to ${firstSpaceYStackClass || \"stack-md\"}.`);\r\n }\r\n\r\n if (sawSpaceX && allowsRule(policy, \"spacing\")) {\r\n addNote(summary, `Mapped ${firstSpaceXToken} to gap utility.`);\r\n }\r\n\r\n const responsiveAuto = chooseGridAutoClass(gridByBreakpoint);\r\n if (responsiveAuto && allowsRule(policy, \"grid\")) {\r\n mapped.delete(\"grid-cols-1\");\r\n mapped.delete(\"grid-cols-2\");\r\n mapped.delete(\"grid-cols-3\");\r\n mapped.delete(\"grid-cols-4\");\r\n mapped.delete(\"grid-cols-6\");\r\n mapped.add(\"grid\");\r\n mapped.add(responsiveAuto);\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.layout.responsive-grid-to-auto\");\r\n addNote(summary, `Collapsed responsive grid columns to ${responsiveAuto}.`);\r\n } else if (allowsRule(policy, \"grid\")) {\r\n const responsiveGridBreakpoints = BREAKPOINT_ORDER.filter(\r\n (bp) => bp !== \"base\" && Number.isFinite(gridByBreakpoint[bp])\r\n );\r\n\r\n responsiveGridBreakpoints.forEach((bp) => {\r\n const cols = gridByBreakpoint[bp];\r\n const utilityClass = resolveResponsiveGridUtilityClass(bp, cols);\r\n\r\n if (utilityClass) {\r\n mapped.add(\"grid\");\r\n mapped.add(utilityClass);\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.layout.responsive-grid-to-auto\");\r\n addNote(summary, `Mapped ${bp}:grid-cols-${cols} to ${utilityClass}.`);\r\n return;\r\n }\r\n\r\n const fallbackClass = registerImportStyle(\r\n summary,\r\n `grid-cols-${cols}`,\r\n `grid-template-columns:repeat(${cols}, minmax(0, 1fr))`,\r\n bp\r\n );\r\n if (fallbackClass) {\r\n mapped.add(\"grid\");\r\n mapped.add(fallbackClass);\r\n summary.intentHits += 1;\r\n recordRule(summary, \"fallback.import-style.grid-cols-responsive\");\r\n addNote(summary, `Mapped ${bp}:grid-cols-${cols} to responsive import fallback for exact columns.`);\r\n }\r\n });\r\n }\r\n\r\n if (\r\n allowsRule(policy, \"flex\") &&\r\n sourceTokens.includes(\"flex-col\") &&\r\n (flexByBreakpoint.md === \"flex-row\" || flexByBreakpoint.lg === \"flex-row\")\r\n ) {\r\n mapped.delete(\"flex-col\");\r\n mapped.delete(\"flex-row\");\r\n mapped.add(\"mobile-stack\");\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.layout.mobile-stack\");\r\n addNote(summary, \"Mapped flex-col + breakpoint flex-row to mobile-stack.\");\r\n }\r\n\r\n const hasFlexLayoutClass = mapped.has(\"flex\") || mapped.has(\"inline-flex\");\r\n if (hasFlexLayoutClass && allowsRule(policy, \"spacing\")) {\r\n const hasExplicitSpacing = hasGapUtilityClass(mapped) || hasStackUtilityClass(mapped) || sawSpaceX || sawSpaceY;\r\n if (!hasExplicitSpacing) {\r\n mapped.add(\"gap-sm\");\r\n summary.intentHits += 1;\r\n recordRule(summary, \"layout.spacing.flex-min-gap\");\r\n addNote(summary, \"Added gap-sm fallback for flex container without explicit spacing.\");\r\n }\r\n }\r\n\r\n const hadGridColsIntent = sourceTokens.some((token) => /^grid-cols-\\d+$/.test(parseVariantToken(token).base));\r\n if (hadGridColsIntent && mapped.has(\"grid\") && !hasGridSizingClass(mapped)) {\r\n const safetyAuto = chooseGridAutoClass(gridByBreakpoint);\r\n if (safetyAuto) {\r\n mapped.add(safetyAuto);\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.layout.responsive-grid-to-auto\");\r\n addNote(summary, `Applied grid safety fallback ${safetyAuto} to avoid bare grid output.`);\r\n } else if (Number.isFinite(gridByBreakpoint.base) && gridByBreakpoint.base > 1) {\r\n mapped.add(`grid-cols-${gridByBreakpoint.base}`);\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.layout.grid-safety-fallback\");\r\n addNote(summary, `Applied grid safety fallback grid-cols-${gridByBreakpoint.base} to preserve explicit grid intent.`);\r\n } else {\r\n mapped.add(\"mobile-stack\");\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.layout.grid-safety-fallback.mobile-stack\");\r\n addNote(summary, \"Applied mobile-stack safety fallback to avoid bare grid output when explicit grid intent was present.\");\r\n }\r\n }\r\n\r\n const hasSurfaceSignal = sourceTokens.some((token) => /^(?:bg-white|shadow|shadow-md|shadow-lg)$/.test(token));\r\n const hasCardShapeSignal = sourceTokens.some((token) => /^rounded/.test(token));\r\n const isContainerTag = [\"div\", \"section\", \"article\", \"li\", \"aside\"].includes(tagName);\r\n if (isContainerTag && hasSurfaceSignal && hasCardShapeSignal) {\r\n mapped.add(\"card\");\r\n if (!mapped.has(\"surface-elevated\") && sourceTokens.some((token) => /^shadow/.test(token))) {\r\n mapped.add(\"surface-elevated\");\r\n }\r\n if (!mapped.has(\"surface-base\") && sourceTokens.includes(\"bg-white\")) {\r\n mapped.add(\"surface-base\");\r\n }\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.card\");\r\n }\r\n\r\n const isButtonLike = tagName === \"button\" || tagName === \"a\";\r\n if (isButtonLike) {\r\n const hasPrimarySignal = sourceTokens.some((token) => /^bg-(?:[a-z]+-)?[4567]00$/.test(token)) && sourceTokens.includes(\"text-white\");\r\n const hasOutlineSignal = sourceTokens.some((token) => /^border/.test(token)) && !hasPrimarySignal;\r\n const hasCompactSignal = sourceTokens.includes(\"p-2\") && sourceTokens.includes(\"rounded-full\");\r\n\r\n if (hasPrimarySignal) {\r\n mapped.delete(\"surface-base\");\r\n mapped.delete(\"surface-elevated\");\r\n mapped.add(\"btn-primary\");\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.button.primary\");\r\n } else if (hasOutlineSignal) {\r\n mapped.add(\"btn-outline\");\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.button.outline\");\r\n }\r\n\r\n if (hasCompactSignal) {\r\n mapped.add(\"icon-only\");\r\n recordRule(summary, \"intent.component.button.icon-only\");\r\n }\r\n }\r\n\r\n if (buttonIntent.shouldNormalize) {\r\n for (const className of Array.from(mapped)) {\r\n if (String(className).startsWith(\"import-\")) {\r\n mapped.delete(className);\r\n }\r\n }\r\n\r\n const buttonStructuralClasses = [\r\n \"flex\",\r\n \"inline-flex\",\r\n \"items-start\",\r\n \"items-center\",\r\n \"items-end\",\r\n \"justify-start\",\r\n \"justify-center\",\r\n \"justify-end\",\r\n \"justify-between\",\r\n \"shrink\",\r\n \"self-start\",\r\n \"self-center\",\r\n \"self-end\",\r\n \"cursor-pointer\",\r\n \"truncate\",\r\n \"overflow-hidden\",\r\n \"whitespace-nowrap\",\r\n \"surface-base\",\r\n \"surface-elevated\",\r\n \"surface-subtle\",\r\n \"card\",\r\n ];\r\n buttonStructuralClasses.forEach((name) => mapped.delete(name));\r\n\r\n if (buttonIntent.variant === \"primary\") {\r\n mapped.add(\"btn-primary\");\r\n recordRule(summary, \"intent.component.button.primary\");\r\n } else if (buttonIntent.variant === \"outline\") {\r\n mapped.add(\"btn-outline\");\r\n recordRule(summary, \"intent.component.button.outline\");\r\n }\r\n\r\n if (buttonIntent.size === \"sm\") {\r\n mapped.add(\"btn-sm\");\r\n recordRule(summary, \"intent.component.button.size-sm\");\r\n } else if (buttonIntent.size === \"lg\") {\r\n mapped.add(\"btn-lg\");\r\n recordRule(summary, \"intent.component.button.size-lg\");\r\n }\r\n\r\n if (buttonIntent.iconOnly) {\r\n mapped.add(\"icon-only\");\r\n recordRule(summary, \"intent.component.button.icon-only\");\r\n }\r\n\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.button.normalize\");\r\n }\r\n\r\n if (badgeIntent.shouldNormalize) {\r\n for (const className of Array.from(mapped)) {\r\n if (String(className).startsWith(\"import-\")) {\r\n mapped.delete(className);\r\n }\r\n }\r\n\r\n const badgeStructuralClasses = [\r\n \"flex\",\r\n \"inline-flex\",\r\n \"items-start\",\r\n \"items-center\",\r\n \"items-end\",\r\n \"justify-start\",\r\n \"justify-center\",\r\n \"justify-end\",\r\n \"justify-between\",\r\n \"grow\",\r\n \"shrink\",\r\n \"self-start\",\r\n \"self-center\",\r\n \"self-end\",\r\n \"cursor-pointer\",\r\n \"truncate\",\r\n \"overflow-hidden\",\r\n \"whitespace-nowrap\",\r\n \"text-muted\",\r\n \"surface-base\",\r\n \"surface-elevated\",\r\n \"surface-subtle\",\r\n \"card\",\r\n ];\r\n badgeStructuralClasses.forEach((name) => mapped.delete(name));\r\n\r\n mapped.add(\"badge\");\r\n if (badgeIntent.variantClass) {\r\n mapped.add(badgeIntent.variantClass);\r\n }\r\n if (badgeIntent.outline) {\r\n mapped.add(\"badge-outline\");\r\n }\r\n if (badgeIntent.sizeClass) {\r\n mapped.add(badgeIntent.sizeClass);\r\n }\r\n\r\n if (badgeIntent.pastel && badgeIntent.pastel.family) {\r\n const bgVar = mapTailwindColorToPdsColorVar(\r\n badgeIntent.pastel.family,\r\n String(badgeIntent.pastel.bgShade || 200)\r\n );\r\n const textVar = mapTailwindColorToPdsColorVar(\r\n badgeIntent.pastel.family,\r\n String(badgeIntent.pastel.textShade || 700)\r\n );\r\n\r\n if (bgVar && textVar) {\r\n const pastelToken = `badge-pastel-${badgeIntent.pastel.family}-${badgeIntent.pastel.bgShade}-${badgeIntent.pastel.textShade}`;\r\n const pastelClass = registerImportStyle(\r\n summary,\r\n pastelToken,\r\n `background-color:${bgVar};color:${textVar}`,\r\n \"base\"\r\n );\r\n if (pastelClass) {\r\n mapped.add(pastelClass);\r\n recordRule(summary, \"intent.component.badge.pastel-preserve\");\r\n addNote(summary, `Preserved pastel badge tone using ${pastelClass}.`);\r\n }\r\n }\r\n }\r\n\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.badge.normalize\");\r\n addNote(summary, \"Normalized badge/pill utility cluster to PDS badge classes.\");\r\n }\r\n\r\n if (cardIntent.shouldNormalize) {\r\n for (const className of Array.from(mapped)) {\r\n if (String(className).startsWith(\"import-\")) {\r\n mapped.delete(className);\r\n }\r\n }\r\n\r\n const cardStructuralClasses = [\r\n \"surface-base\",\r\n \"surface-subtle\",\r\n \"surface-elevated\",\r\n \"surface-sunken\",\r\n \"surface-overlay\",\r\n \"surface-inverse\",\r\n \"surface-primary\",\r\n \"surface-secondary\",\r\n \"surface-success\",\r\n \"surface-warning\",\r\n \"surface-danger\",\r\n \"surface-info\",\r\n \"card-basic\",\r\n \"card-elevated\",\r\n \"card-outlined\",\r\n \"card-interactive\",\r\n ];\r\n cardStructuralClasses.forEach((name) => mapped.delete(name));\r\n\r\n mapped.add(\"card\");\r\n if (cardIntent.cardVariantClass) {\r\n mapped.add(cardIntent.cardVariantClass);\r\n }\r\n if (cardIntent.surfaceClass) {\r\n mapped.add(cardIntent.surfaceClass);\r\n }\r\n\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.component.card.normalize\");\r\n addNote(summary, \"Normalized card utility cluster to PDS card/surface classes.\");\r\n }\r\n\r\n if (tagName === \"a\" && !buttonIntent.shouldNormalize) {\r\n const hasLinkSignal = sourceTokens.some(\r\n (token) => token.includes(\"hover:text\") || token === \"transition-colors\"\r\n );\r\n if (hasLinkSignal) {\r\n const linkResetClass = registerImportStyle(summary, \"link-reset\", \"text-decoration:none\");\r\n if (linkResetClass) {\r\n mapped.add(linkResetClass);\r\n }\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.typography.link-treatment\");\r\n }\r\n }\r\n\r\n if (tagName === \"footer\") {\r\n const hasFooterSurfaceSignal = mapped.has(\"surface-base\") || sourceTokens.some((token) => /^bg-/.test(token));\r\n if (hasFooterSurfaceSignal) {\r\n mapped.delete(\"surface-base\");\r\n mapped.delete(\"surface-subtle\");\r\n mapped.add(\"surface-inverse\");\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.surface.footer-inverse\");\r\n }\r\n }\r\n\r\n if (preflightHints?.listReset && [\"ul\", \"ol\", \"menu\"].includes(tagName)) {\r\n const listResetClass = registerImportStyle(summary, \"list-reset\", \"list-style:none;margin:0;padding:0\");\r\n if (listResetClass) {\r\n mapped.add(listResetClass);\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.preflight.list-reset\");\r\n }\r\n }\r\n\r\n if (preflightHints?.anchorReset && tagName === \"a\" && !buttonIntent.shouldNormalize) {\r\n const anchorResetClass = registerImportStyle(\r\n summary,\r\n \"anchor-reset\",\r\n \"color:inherit;text-decoration:inherit\"\r\n );\r\n if (anchorResetClass) {\r\n mapped.add(anchorResetClass);\r\n summary.intentHits += 1;\r\n recordRule(summary, \"intent.preflight.anchor-reset\");\r\n }\r\n }\r\n\r\n const fallbackContainerTags = new Set([\"div\", \"section\", \"article\", \"aside\", \"nav\", \"main\", \"header\", \"footer\", \"form\", \"fieldset\", \"ul\", \"ol\", \"li\"]);\r\n const hadContainerStructuralLayoutSignal = sourceTokens.some((token) => {\r\n const baseToken = parseVariantToken(token).base;\r\n return /^(?:flex|grid|container|gap-|space-[xy]-|items-|justify-|content-|place-|self-|w-|h-|min-|max-)/.test(baseToken);\r\n });\r\n if (mapped.size === 0 && fallbackContainerTags.has(tagName) && hadContainerStructuralLayoutSignal) {\r\n mapped.add(\"stack-sm\");\r\n addNote(summary, `Added stack-sm fallback for <${tagName}> with unmapped classes.`);\r\n }\r\n\r\n return Array.from(mapped).join(\" \");\r\n}\r\n\r\nfunction convertHtmlWithRules(html = \"\", options = {}) {\r\n const source = String(html || \"\");\r\n const policy = resolveConversionPolicy(options.config || {});\r\n const breakpoints = resolveBreakpoints(options.config || {});\r\n const summary = createConversionSummary();\r\n const extracted = extractTailwindRuntimeContext(source, summary);\r\n const normalizedSource = applyLabelNestingRule(extracted.html, summary);\r\n\r\n const convertedHtmlRaw = normalizedSource.replace(\r\n /<([a-zA-Z][\\w:-]*)([^>]*?)\\sclass\\s*=\\s*([\"'])(.*?)\\3([^>]*)>/gs,\r\n (fullMatch, tagName, beforeAttrs, quote, classValue, afterAttrs) => {\r\n const nextClassValue = buildClassReplacement({\r\n tagName: String(tagName || \"\").toLowerCase(),\r\n originalClassValue: classValue,\r\n policy,\r\n summary,\r\n preflightHints: extracted.hints,\r\n });\r\n\r\n const compact = String(nextClassValue || \"\").trim();\r\n if (!compact) {\r\n return `<${tagName}${beforeAttrs}${afterAttrs}>`;\r\n }\r\n\r\n return `<${tagName}${beforeAttrs} class=${quote}${compact}${quote}${afterAttrs}>`;\r\n }\r\n );\r\n\r\n const postProcessedHtml = normalizeSemanticTypography(\r\n normalizeMetricPairStackContainers(\r\n normalizeMetricTextParagraphs(\r\n normalizeIconOnlyButtons(convertedHtmlRaw, summary),\r\n summary\r\n ),\r\n summary\r\n ),\r\n summary,\r\n { config: options.config || {} }\r\n );\r\n const importCss = generateImportStyleSheetText(summary, breakpoints);\r\n const convertedHtml = injectImportStyleBlock(postProcessedHtml, importCss);\r\n if (importCss) {\r\n addNote(summary, `Generated ${summary.importedStyleCount} import-* fallback style mappings.`);\r\n }\r\n\r\n if (summary.removedAtomicSpacingCount > 0 || summary.removedAtomicPositioningCount > 0) {\r\n addNote(\r\n summary,\r\n `Removed atomic utilities by policy: spacing=${summary.removedAtomicSpacingCount}, positioning=${summary.removedAtomicPositioningCount}.`\r\n );\r\n }\r\n\r\n const unknownTokens = listTopUnknownTokens(summary, 16);\r\n const handled = summary.mapped + summary.ignored + summary.policySkipped;\r\n const baseCoverage = summary.totalTailwind > 0 ? handled / summary.totalTailwind : 1;\r\n const unknownRatio = summary.totalTailwind > 0 ? summary.unknown / summary.totalTailwind : 0;\r\n\r\n const confidenceRaw =\r\n 0.42 +\r\n baseCoverage * 0.45 +\r\n Math.min(summary.intentHits, 4) * 0.025 -\r\n unknownRatio * 0.18;\r\n const confidence = Math.max(0.15, Math.min(0.96, Number(confidenceRaw.toFixed(2))));\r\n\r\n const commentLines = [\r\n `pds-import: rulebook=${RULEBOOK_VERSION} confidence=${Math.round(confidence * 100)}%`,\r\n `pds-import: tailwind=${summary.totalTailwind} mapped=${summary.mapped} ignored=${summary.ignored} policySkipped=${summary.policySkipped} unknown=${summary.unknown}`,\r\n ];\r\n\r\n if (unknownTokens.length) {\r\n commentLines.push(`pds-import: unknown-tailwind=${unknownTokens.join(\", \")}`);\r\n }\r\n\r\n if (summary.notes.length) {\r\n commentLines.push(`pds-import: notes=${summary.notes.join(\" | \")}`);\r\n }\r\n\r\n const annotatedHtml = `<!-- ${commentLines.join(\" -->\\n<!-- \")} -->\\n${convertedHtml}`;\r\n\r\n const issues = [];\r\n if (summary.unknown > 0) {\r\n issues.push({\r\n severity: \"warning\",\r\n message: `Converted with ${summary.unknown} unknown Tailwind utilities requiring manual review.`,\r\n });\r\n }\r\n if (summary.policySkipped > 0) {\r\n issues.push({\r\n severity: \"info\",\r\n message: `Skipped ${summary.policySkipped} utility mappings due to PDS config policy.`,\r\n });\r\n }\r\n if (unknownTokens.length) {\r\n issues.push({\r\n severity: \"info\",\r\n message: `Top unknown utilities: ${unknownTokens.slice(0, 8).join(\", \")}`,\r\n });\r\n }\r\n\r\n return {\r\n html: annotatedHtml,\r\n confidence,\r\n issues,\r\n meta: {\r\n rulebookVersion: RULEBOOK_VERSION,\r\n coverage: {\r\n tailwind: summary.totalTailwind,\r\n mapped: summary.mapped,\r\n ignored: summary.ignored,\r\n policySkipped: summary.policySkipped,\r\n unknown: summary.unknown,\r\n importedStyles: summary.importedStyleCount,\r\n nestedLabelPairs: summary.labelNestingCount,\r\n },\r\n unknownTailwindTokens: unknownTokens,\r\n notes: summary.notes,\r\n appliedRules: Array.from(summary.appliedRules),\r\n policy,\r\n importStyleSheetInjected: Boolean(importCss),\r\n breakpoints,\r\n },\r\n };\r\n}\r\n\r\nexport function describeTailwindConversionRules() {\r\n return {\r\n rulesJsonPath: RULEBOOK_JSON_PATH,\r\n ...TAILWIND_TO_PDS_RULES,\r\n directMappings: TAILWIND_TO_PDS_RULES.directMappings.map((rule) => ({\r\n id: rule.id,\r\n tw: rule.tw,\r\n pds: rule.pds,\r\n gate: rule.gate || null,\r\n })),\r\n ignoredPatterns: TAILWIND_TO_PDS_RULES.ignoredPatterns.map((rule) => ({\r\n id: rule.id,\r\n pattern: String(rule.pattern),\r\n reason: rule.reason,\r\n })),\r\n };\r\n}\r\n\r\nfunction inferPrimaryColor(text) {\r\n const hex = String(text || \"\").match(/#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})\\b/);\r\n return hex ? hex[0] : null;\r\n}\r\n\r\nfunction escapeHtml(value) {\r\n return String(value || \"\")\r\n .replaceAll(\"&\", \"&\")\r\n .replaceAll(\"<\", \"<\")\r\n .replaceAll(\">\", \">\")\r\n .replaceAll('\"', \""\")\r\n .replaceAll(\"'\", \"'\");\r\n}\r\n\r\nfunction isLikelyHtml(value) {\r\n return /<\\s*[a-z][^>]*>/i.test(String(value || \"\"));\r\n}\r\n\r\nfunction toPxNumber(value) {\r\n const text = String(value || \"\").trim().toLowerCase();\r\n if (!text) return null;\r\n const numeric = Number.parseFloat(text);\r\n if (!Number.isFinite(numeric)) return null;\r\n if (text.endsWith(\"rem\") || text.endsWith(\"em\")) return numeric * 16;\r\n if (text.endsWith(\"px\") || /^[0-9.\\-]+$/.test(text)) return numeric;\r\n return null;\r\n}\r\n\r\nfunction normalizeCssColor(value) {\r\n const text = String(value || \"\").trim();\r\n if (!text) return \"\";\r\n const hexMatch = text.match(/#(?:[0-9a-f]{3,8})\\b/i);\r\n if (hexMatch) return hexMatch[0].toLowerCase();\r\n const rgbMatch = text.match(/rgba?\\([^)]*\\)/i);\r\n if (rgbMatch) return rgbMatch[0];\r\n const hslMatch = text.match(/hsla?\\([^)]*\\)/i);\r\n if (hslMatch) return hslMatch[0];\r\n return \"\";\r\n}\r\n\r\nfunction resolveCssVariableValue(varName = \"\") {\r\n const name = String(varName || \"\").trim();\r\n if (!name || typeof window === \"undefined\" || typeof document === \"undefined\") return \"\";\r\n const root = document.documentElement;\r\n if (!root) return \"\";\r\n const computed = window.getComputedStyle(root);\r\n return String(computed.getPropertyValue(name) || \"\").trim();\r\n}\r\n\r\nfunction resolveColorFromMaybeVar(value = \"\") {\r\n const text = String(value || \"\").trim();\r\n const direct = normalizeCssColor(text);\r\n if (direct) return direct;\r\n\r\n const varMatch = text.match(/var\\(\\s*(--[^\\s,)]+)\\s*(?:,[^)]+)?\\)/i);\r\n if (!varMatch) return \"\";\r\n const resolved = resolveCssVariableValue(varMatch[1]);\r\n return normalizeCssColor(resolved);\r\n}\r\n\r\nfunction resolveTailwindBackgroundTokenToColor(token = \"\") {\r\n const raw = String(token || \"\").trim();\r\n if (!raw) return \"\";\r\n const baseToken = raw.split(\":\").pop() || raw;\r\n\r\n if (baseToken === \"bg-white\") return \"#ffffff\";\r\n if (baseToken === \"bg-black\") return \"#000000\";\r\n\r\n const alphaBlack = baseToken.match(/^bg-black\\/(\\d{1,3})$/i);\r\n if (alphaBlack) {\r\n const alpha = Math.max(0, Math.min(100, Number(alphaBlack[1]))) / 100;\r\n return `rgba(0,0,0,${alpha})`;\r\n }\r\n\r\n const arbitrary = baseToken.match(/^bg-\\[([^\\]]+)\\]$/i);\r\n if (arbitrary) {\r\n return normalizeCssColor(arbitrary[1]);\r\n }\r\n\r\n const familyShade = baseToken.match(/^bg-([a-z]+)-(\\d{2,3})$/i);\r\n if (!familyShade) return \"\";\r\n\r\n const colorVar = mapTailwindColorToPdsColorVar(familyShade[1], familyShade[2]);\r\n if (!colorVar) return \"\";\r\n return resolveColorFromMaybeVar(colorVar);\r\n}\r\n\r\nfunction extractTailwindBackgroundColorsFromClass(className = \"\") {\r\n const tokens = String(className || \"\")\r\n .split(/\\s+/)\r\n .map((token) => token.trim())\r\n .filter(Boolean);\r\n\r\n return tokens\r\n .map((token) => resolveTailwindBackgroundTokenToColor(token))\r\n .filter(Boolean);\r\n}\r\n\r\nfunction parseCssRuleBlocks(cssText = \"\") {\r\n const blocks = [];\r\n const input = String(cssText || \"\");\r\n const regex = /([^{}]+)\\{([^{}]*)\\}/g;\r\n let match = regex.exec(input);\r\n while (match) {\r\n const selector = String(match[1] || \"\").trim();\r\n const body = String(match[2] || \"\").trim();\r\n if (selector && body) {\r\n blocks.push({ selector, body });\r\n }\r\n match = regex.exec(input);\r\n }\r\n return blocks;\r\n}\r\n\r\nfunction isRootLikeSelector(selector = \"\") {\r\n const text = String(selector || \"\").toLowerCase();\r\n if (!text) return false;\r\n return /(^|\\s|,)(html|body|:root|main)(\\s|,|$)|#app\\b|#root\\b|\\.app\\b|\\.page\\b/.test(text);\r\n}\r\n\r\nfunction parseRgbColor(value = \"\") {\r\n const match = String(value || \"\")\r\n .trim()\r\n .match(/rgba?\\(\\s*([0-9.]+)\\s*,\\s*([0-9.]+)\\s*,\\s*([0-9.]+)(?:\\s*,\\s*([0-9.]+))?\\s*\\)/i);\r\n if (!match) return null;\r\n const r = Number.parseFloat(match[1]);\r\n const g = Number.parseFloat(match[2]);\r\n const b = Number.parseFloat(match[3]);\r\n const a = match[4] == null ? 1 : Number.parseFloat(match[4]);\r\n if (![r, g, b, a].every((num) => Number.isFinite(num))) return null;\r\n return {\r\n r: Math.max(0, Math.min(255, r)),\r\n g: Math.max(0, Math.min(255, g)),\r\n b: Math.max(0, Math.min(255, b)),\r\n a: Math.max(0, Math.min(1, a)),\r\n };\r\n}\r\n\r\nfunction parseHexColor(value = \"\") {\r\n const match = String(value || \"\").trim().match(/^#([0-9a-f]{3,8})$/i);\r\n if (!match) return null;\r\n const raw = match[1].toLowerCase();\r\n if (raw.length === 3) {\r\n const [r, g, b] = raw.split(\"\");\r\n return {\r\n r: Number.parseInt(`${r}${r}`, 16),\r\n g: Number.parseInt(`${g}${g}`, 16),\r\n b: Number.parseInt(`${b}${b}`, 16),\r\n a: 1,\r\n };\r\n }\r\n if (raw.length === 6 || raw.length === 8) {\r\n return {\r\n r: Number.parseInt(raw.slice(0, 2), 16),\r\n g: Number.parseInt(raw.slice(2, 4), 16),\r\n b: Number.parseInt(raw.slice(4, 6), 16),\r\n a: raw.length === 8 ? Number.parseInt(raw.slice(6, 8), 16) / 255 : 1,\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nfunction colorToRgba(value = \"\") {\r\n const normalized = normalizeCssColor(value);\r\n if (!normalized) return null;\r\n if (normalized.startsWith(\"#\")) return parseHexColor(normalized);\r\n if (normalized.startsWith(\"rgb\")) return parseRgbColor(normalized);\r\n return null;\r\n}\r\n\r\nfunction relativeLuminance(color) {\r\n if (!color) return null;\r\n const channel = (value) => {\r\n const n = Number(value) / 255;\r\n return n <= 0.03928 ? n / 12.92 : ((n + 0.055) / 1.055) ** 2.4;\r\n };\r\n const r = channel(color.r);\r\n const g = channel(color.g);\r\n const b = channel(color.b);\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n}\r\n\r\nfunction isTransparentColor(value = \"\") {\r\n const text = String(value || \"\").trim().toLowerCase();\r\n if (!text) return true;\r\n if (text === \"transparent\") return true;\r\n const rgba = colorToRgba(text);\r\n if (rgba && Number.isFinite(rgba.a)) return rgba.a <= 0.04;\r\n return false;\r\n}\r\n\r\nfunction chooseBackgroundColor(rootCandidates = [], fallbackCandidates = []) {\r\n const normalizedRoot = rootCandidates\r\n .map((value) => normalizeCssColor(value))\r\n .filter((value) => value && !isTransparentColor(value));\r\n const rootWinner = pickMostFrequent(normalizedRoot);\r\n if (rootWinner) {\r\n return { color: rootWinner, source: \"root\" };\r\n }\r\n\r\n const normalizedFallback = fallbackCandidates\r\n .map((value) => normalizeCssColor(value))\r\n .filter((value) => value && !isTransparentColor(value));\r\n\r\n const brightFallback = normalizedFallback.filter((value) => {\r\n const rgba = colorToRgba(value);\r\n const lum = relativeLuminance(rgba);\r\n return Number.isFinite(lum) ? lum >= 0.72 : false;\r\n });\r\n\r\n const brightWinner = pickMostFrequent(brightFallback);\r\n if (brightWinner) {\r\n return { color: brightWinner, source: \"fallback-bright\" };\r\n }\r\n\r\n const fallbackWinner = pickMostFrequent(normalizedFallback);\r\n if (fallbackWinner) {\r\n return { color: fallbackWinner, source: \"fallback\" };\r\n }\r\n\r\n return { color: \"\", source: \"none\" };\r\n}\r\n\r\nfunction parseCssDeclarations(text, out = new Map()) {\r\n const input = String(text || \"\");\r\n const regex = /([a-z-]+)\\s*:\\s*([^;{}]+)/gi;\r\n let match = regex.exec(input);\r\n while (match) {\r\n const prop = String(match[1] || \"\").trim().toLowerCase();\r\n const value = String(match[2] || \"\").trim();\r\n if (prop && value) {\r\n if (!out.has(prop)) out.set(prop, []);\r\n out.get(prop).push(value);\r\n }\r\n match = regex.exec(input);\r\n }\r\n return out;\r\n}\r\n\r\nfunction collectHtmlSignals(rawInput = \"\") {\r\n const input = String(rawInput || \"\");\r\n const declarations = new Map();\r\n const colorValues = [];\r\n const rootBackgroundColors = [];\r\n const rootClassBackgroundColors = [];\r\n const classBackgroundColors = [];\r\n const buttonBackgroundColors = [];\r\n const classTokens = [];\r\n const textChunks = [];\r\n\r\n const colorRegex = /#(?:[0-9a-f]{3,8})\\b|rgba?\\([^)]*\\)|hsla?\\([^)]*\\)/gi;\r\n const pushColors = (text) => {\r\n const matches = String(text || \"\").match(colorRegex) || [];\r\n matches.forEach((item) => {\r\n const normalized = normalizeCssColor(item);\r\n if (normalized) colorValues.push(normalized);\r\n });\r\n };\r\n\r\n if (typeof DOMParser !== \"undefined\" && isLikelyHtml(input)) {\r\n try {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(input, \"text/html\");\r\n const styles = Array.from(doc.querySelectorAll(\"style\")).map((node) => node.textContent || \"\");\r\n styles.forEach((styleText) => {\r\n parseCssDeclarations(styleText, declarations);\r\n pushColors(styleText);\r\n parseCssRuleBlocks(styleText).forEach((block) => {\r\n if (!isRootLikeSelector(block.selector)) return;\r\n const rootDeclarations = parseCssDeclarations(block.body, new Map());\r\n const rootValues = getDeclarationValues(rootDeclarations, [\"background\", \"background-color\"])\r\n .map((value) => normalizeCssColor(value))\r\n .filter(Boolean);\r\n rootBackgroundColors.push(...rootValues);\r\n });\r\n });\r\n\r\n const inlineNodes = Array.from(doc.querySelectorAll(\"[style]\"));\r\n inlineNodes.forEach((node) => {\r\n const inlineStyle = node.getAttribute(\"style\") || \"\";\r\n parseCssDeclarations(inlineStyle, declarations);\r\n pushColors(inlineStyle);\r\n });\r\n\r\n const rootInlineSelectors = [\"html\", \"body\", \"main\", \"#app\", \"#root\", \".app\", \".page\"];\r\n rootInlineSelectors.forEach((selector) => {\r\n const rootNode = doc.querySelector(selector);\r\n if (!rootNode) return;\r\n const inlineStyle = rootNode.getAttribute(\"style\") || \"\";\r\n if (!inlineStyle) return;\r\n const rootDeclarations = parseCssDeclarations(inlineStyle, new Map());\r\n const rootValues = getDeclarationValues(rootDeclarations, [\"background\", \"background-color\"])\r\n .map((value) => normalizeCssColor(value))\r\n .filter(Boolean);\r\n rootBackgroundColors.push(...rootValues);\r\n\r\n const classColors = extractTailwindBackgroundColorsFromClass(rootNode.getAttribute(\"class\") || \"\");\r\n rootClassBackgroundColors.push(...classColors);\r\n });\r\n\r\n const classNodes = Array.from(doc.querySelectorAll(\"[class]\"));\r\n classNodes.forEach((node) => {\r\n const tokens = parseClassTokens(node.getAttribute(\"class\") || \"\");\r\n classTokens.push(...tokens);\r\n const classColors = extractTailwindBackgroundColorsFromClass(node.getAttribute(\"class\") || \"\");\r\n classBackgroundColors.push(...classColors);\r\n\r\n const tagName = String(node.tagName || \"\").toLowerCase();\r\n const isButtonLike = tagName === \"button\" || tagName === \"a\";\r\n const hasBgSignal = tokens.some((token) => /^bg-/.test(String(parseVariantToken(token).base || \"\")));\r\n if (isButtonLike && hasBgSignal && classColors.length) {\r\n buttonBackgroundColors.push(...classColors);\r\n }\r\n });\r\n\r\n const text = doc.body?.textContent || \"\";\r\n if (text.trim()) textChunks.push(text);\r\n pushColors(doc.documentElement?.outerHTML || input);\r\n } catch (error) {\r\n parseCssDeclarations(input, declarations);\r\n pushColors(input);\r\n textChunks.push(input);\r\n }\r\n } else {\r\n parseCssDeclarations(input, declarations);\r\n pushColors(input);\r\n textChunks.push(input);\r\n }\r\n\r\n return {\r\n declarations,\r\n colorValues,\r\n rootBackgroundColors,\r\n rootClassBackgroundColors,\r\n classBackgroundColors,\r\n buttonBackgroundColors,\r\n classTokens,\r\n textCorpus: textChunks.join(\"\\n\"),\r\n };\r\n}\r\n\r\nfunction pickMostFrequent(values = []) {\r\n const counts = new Map();\r\n values.forEach((value) => {\r\n const key = String(value || \"\").trim();\r\n if (!key) return;\r\n counts.set(key, (counts.get(key) || 0) + 1);\r\n });\r\n let winner = \"\";\r\n let winnerCount = -1;\r\n counts.forEach((count, key) => {\r\n if (count > winnerCount) {\r\n winner = key;\r\n winnerCount = count;\r\n }\r\n });\r\n return winner;\r\n}\r\n\r\nfunction getDeclarationValues(map, propNames = []) {\r\n return propNames.flatMap((name) => map.get(name) || []);\r\n}\r\n\r\nfunction getSchemaNodeByPath(schema, path) {\r\n if (!schema || !path) return null;\r\n const segments = String(path).split(\".\").filter(Boolean);\r\n let node = schema;\r\n for (const segment of segments) {\r\n if (!node || node.type !== \"object\" || !node.properties || typeof node.properties !== \"object\") {\r\n return null;\r\n }\r\n node = node.properties[segment];\r\n }\r\n return node || null;\r\n}\r\n\r\nfunction getInferenceContext(config = {}) {\r\n const design = config && typeof config === \"object\" ? config : {};\r\n const relations = PDS?.configRelations && typeof PDS.configRelations === \"object\"\r\n ? PDS.configRelations\r\n : {};\r\n const allowedPaths = new Set(Object.keys(relations));\r\n\r\n let schema = null;\r\n if (typeof PDS?.buildConfigFormSchema === \"function\") {\r\n try {\r\n schema = PDS.buildConfigFormSchema(design)?.schema || null;\r\n } catch (error) {\r\n schema = null;\r\n }\r\n }\r\n if (!schema && PDS?.configFormSchema?.schema) {\r\n schema = PDS.configFormSchema.schema;\r\n }\r\n\r\n return { design, schema, allowedPaths };\r\n}\r\n\r\nfunction coerceValueForNode(node, value) {\r\n if (!node) return value;\r\n\r\n if (Array.isArray(node.oneOf) && node.oneOf.length) {\r\n const options = node.oneOf\r\n .map((item) => item?.const)\r\n .filter((item) => item !== undefined && item !== null);\r\n if (options.length) {\r\n if (typeof value === \"string\") {\r\n const matched = options.find(\r\n (option) => String(option).toLowerCase() === value.toLowerCase()\r\n );\r\n if (matched !== undefined) return matched;\r\n }\r\n if (typeof value === \"number\") {\r\n const numeric = options\r\n .map((option) => Number(option))\r\n .filter((option) => Number.isFinite(option));\r\n if (numeric.length) {\r\n return numeric.reduce((best, current) => (\r\n Math.abs(current - value) < Math.abs(best - value) ? current : best\r\n ), numeric[0]);\r\n }\r\n }\r\n return options[0];\r\n }\r\n }\r\n\r\n if (node.type === \"number\" || node.type === \"integer\") {\r\n const parsed = Number(value);\r\n if (!Number.isFinite(parsed)) return undefined;\r\n return node.type === \"integer\" ? Math.round(parsed) : parsed;\r\n }\r\n\r\n if (node.type === \"boolean\") {\r\n return Boolean(value);\r\n }\r\n\r\n if (node.type === \"string\") {\r\n return String(value || \"\").trim();\r\n }\r\n\r\n return value;\r\n}\r\n\r\nfunction setPatchPath(target, path, value) {\r\n const segments = String(path || \"\").split(\".\").filter(Boolean);\r\n if (!segments.length) return;\r\n let current = target;\r\n for (let index = 0; index < segments.length; index += 1) {\r\n const segment = segments[index];\r\n if (index === segments.length - 1) {\r\n current[segment] = value;\r\n return;\r\n }\r\n if (!current[segment] || typeof current[segment] !== \"object\" || Array.isArray(current[segment])) {\r\n current[segment] = {};\r\n }\r\n current = current[segment];\r\n }\r\n}\r\n\r\nfunction maybeSetInferredValue(state, path, value) {\r\n if (value === undefined || value === null || value === \"\") return;\r\n if (state.allowedPaths.size && !state.allowedPaths.has(path)) return;\r\n\r\n const node = getSchemaNodeByPath(state.schema, path);\r\n const nextValue = coerceValueForNode(node, value);\r\n if (nextValue === undefined || nextValue === null || nextValue === \"\") return;\r\n\r\n setPatchPath(state.patch, path, nextValue);\r\n state.inferredPaths.add(path);\r\n}\r\n\r\nfunction collectMedianPx(values = []) {\r\n const nums = values\r\n .map((item) => toPxNumber(item))\r\n .filter((item) => Number.isFinite(item));\r\n if (!nums.length) return null;\r\n nums.sort((a, b) => a - b);\r\n const middle = Math.floor(nums.length / 2);\r\n if (nums.length % 2) return nums[middle];\r\n return (nums[middle - 1] + nums[middle]) / 2;\r\n}\r\n\r\nfunction inferFontFamily(values = []) {\r\n const cleaned = values\r\n .map((item) => String(item || \"\").split(\",\")[0] || \"\")\r\n .map((item) => item.trim().replace(/^['\"]|['\"]$/g, \"\"))\r\n .filter(Boolean);\r\n return pickMostFrequent(cleaned);\r\n}\r\n\r\nfunction inferBorderWidthKeyword(pxValue) {\r\n const size = Number(pxValue);\r\n if (!Number.isFinite(size)) return \"thin\";\r\n if (size <= 0.75) return \"hairline\";\r\n if (size <= 1.5) return \"thin\";\r\n if (size <= 2.5) return \"medium\";\r\n return \"thick\";\r\n}\r\n\r\nfunction resolveTailwindRoundedTokenPx(token = \"\") {\r\n const baseToken = String(parseVariantToken(token).base || \"\").toLowerCase();\r\n const match = baseToken.match(/^rounded(?:-[trbl]{1,2})?(?:-(none|xs|sm|md|lg|xl|2xl|3xl|full))?$/);\r\n if (!match) return null;\r\n\r\n const size = match[1] || \"DEFAULT\";\r\n const map = {\r\n none: 0,\r\n xs: 2,\r\n sm: 4,\r\n DEFAULT: 6,\r\n md: 8,\r\n lg: 12,\r\n xl: 16,\r\n \"2xl\": 24,\r\n \"3xl\": 32,\r\n };\r\n\r\n if (size === \"full\") return null;\r\n return Number.isFinite(map[size]) ? map[size] : null;\r\n}\r\n\r\nfunction inferRadiusPxFromTailwindClasses(classTokens = []) {\r\n const radiusValues = classTokens\r\n .map((token) => resolveTailwindRoundedTokenPx(token))\r\n .filter((value) => Number.isFinite(value));\r\n if (!radiusValues.length) return null;\r\n radiusValues.sort((a, b) => a - b);\r\n const middle = Math.floor(radiusValues.length / 2);\r\n if (radiusValues.length % 2) return radiusValues[middle];\r\n return (radiusValues[middle - 1] + radiusValues[middle]) / 2;\r\n}\r\n\r\nexport function inferPdsDesignFromHtml(input = {}) {\r\n const html = String(input.html || \"\");\r\n if (!html.trim()) {\r\n return createImportResult({\r\n source: \"html-inference\",\r\n type: String(input.sourceType || \"design-inference\"),\r\n confidence: 0,\r\n issues: [{ severity: \"warning\", message: \"No HTML or guideline text provided for design extraction.\" }],\r\n designPatch: {},\r\n meta: {\r\n extractedPathCount: 0,\r\n extractedPaths: [],\r\n },\r\n });\r\n }\r\n\r\n const context = getInferenceContext(input.config || {});\r\n const signals = collectHtmlSignals(html);\r\n const state = {\r\n patch: {},\r\n inferredPaths: new Set(),\r\n allowedPaths: context.allowedPaths,\r\n schema: context.schema,\r\n };\r\n\r\n const textColors = getDeclarationValues(signals.declarations, [\"color\"])\r\n .map((value) => normalizeCssColor(value))\r\n .filter(Boolean);\r\n const backgroundColors = getDeclarationValues(signals.declarations, [\"background\", \"background-color\"])\r\n .map((value) => normalizeCssColor(value))\r\n .filter(Boolean);\r\n const allColors = [...backgroundColors, ...textColors, ...signals.colorValues].filter(Boolean);\r\n const uniqueColors = Array.from(new Set(allColors));\r\n const explicitRootBackgroundCandidates = [\r\n ...(signals.rootBackgroundColors || []),\r\n ];\r\n const rootClassBackgroundCandidates = [\r\n ...(signals.rootClassBackgroundColors || []),\r\n ];\r\n const rootBackgroundCandidates = explicitRootBackgroundCandidates.length\r\n ? explicitRootBackgroundCandidates\r\n : rootClassBackgroundCandidates;\r\n const fallbackBackgroundCandidates = [\r\n ...backgroundColors,\r\n ...(signals.classBackgroundColors || []),\r\n ];\r\n const backgroundPick = chooseBackgroundColor(rootBackgroundCandidates, fallbackBackgroundCandidates);\r\n const inferredBackground = backgroundPick.color;\r\n maybeSetInferredValue(state, \"colors.background\", inferredBackground || backgroundColors[0] || uniqueColors[0]);\r\n\r\n const paletteColors = uniqueColors.filter((color) => color && color !== inferredBackground);\r\n const buttonPrimary = pickMostFrequent(signals.buttonBackgroundColors || []);\r\n const inferredPrimary = buttonPrimary || paletteColors[0] || uniqueColors[0];\r\n const remainingPalette = paletteColors.filter((color) => color && color !== inferredPrimary);\r\n maybeSetInferredValue(state, \"colors.primary\", inferredPrimary);\r\n maybeSetInferredValue(state, \"colors.secondary\", remainingPalette[0] || inferredPrimary || uniqueColors[0]);\r\n maybeSetInferredValue(state, \"colors.accent\", remainingPalette[1] || remainingPalette[0] || inferredPrimary || uniqueColors[0]);\r\n\r\n const families = getDeclarationValues(signals.declarations, [\"font-family\"]);\r\n const fontFamily = inferFontFamily(families);\r\n maybeSetInferredValue(state, \"typography.fontFamilyBody\", fontFamily);\r\n maybeSetInferredValue(state, \"typography.fontFamilyHeadings\", fontFamily);\r\n maybeSetInferredValue(state, \"typography.fontFamilyMono\", /mono|code/i.test(signals.textCorpus) ? \"JetBrains Mono\" : \"\");\r\n\r\n const fontSizes = getDeclarationValues(signals.declarations, [\"font-size\"]);\r\n const medianFontSizePx = collectMedianPx(fontSizes);\r\n maybeSetInferredValue(state, \"typography.baseSize\", medianFontSizePx);\r\n\r\n const spacingValues = getDeclarationValues(signals.declarations, [\r\n \"padding\",\r\n \"padding-top\",\r\n \"padding-right\",\r\n \"padding-bottom\",\r\n \"padding-left\",\r\n \"margin\",\r\n \"margin-top\",\r\n \"margin-right\",\r\n \"margin-bottom\",\r\n \"margin-left\",\r\n \"gap\",\r\n \"row-gap\",\r\n \"column-gap\",\r\n ]);\r\n const medianSpacing = collectMedianPx(spacingValues);\r\n maybeSetInferredValue(state, \"spatialRhythm.baseUnit\", medianSpacing);\r\n maybeSetInferredValue(state, \"spatialRhythm.inputPadding\", medianSpacing);\r\n maybeSetInferredValue(state, \"spatialRhythm.buttonPadding\", medianSpacing);\r\n\r\n const radiusValues = getDeclarationValues(signals.declarations, [\"border-radius\"]);\r\n const borderRadius = collectMedianPx(radiusValues) || inferRadiusPxFromTailwindClasses(signals.classTokens || []);\r\n maybeSetInferredValue(state, \"shape.radiusSize\", borderRadius);\r\n\r\n const borderWidthValues = getDeclarationValues(signals.declarations, [\r\n \"border-width\",\r\n \"border-top-width\",\r\n \"border-right-width\",\r\n \"border-bottom-width\",\r\n \"border-left-width\",\r\n ]);\r\n const borderWidth = collectMedianPx(borderWidthValues);\r\n maybeSetInferredValue(state, \"shape.borderWidth\", inferBorderWidthKeyword(borderWidth));\r\n\r\n const maxWidthValues = getDeclarationValues(signals.declarations, [\"max-width\"]);\r\n const maxWidth = collectMedianPx(maxWidthValues);\r\n maybeSetInferredValue(state, \"layout.containerMaxWidth\", maxWidth);\r\n maybeSetInferredValue(state, \"layout.maxWidth\", maxWidth);\r\n\r\n const minHeightValues = getDeclarationValues(signals.declarations, [\"min-height\", \"height\"]);\r\n const minHeight = collectMedianPx(minHeightValues);\r\n maybeSetInferredValue(state, \"layout.buttonMinHeight\", minHeight);\r\n maybeSetInferredValue(state, \"layout.inputMinHeight\", minHeight);\r\n\r\n const transitionValues = getDeclarationValues(signals.declarations, [\"transition-duration\"]);\r\n const transitionMs = collectMedianPx(transitionValues.map((value) => {\r\n const text = String(value || \"\").trim().toLowerCase();\r\n const number = Number.parseFloat(text);\r\n if (!Number.isFinite(number)) return null;\r\n if (text.endsWith(\"ms\")) return number;\r\n if (text.endsWith(\"s\")) return number * 1000;\r\n return number;\r\n }));\r\n maybeSetInferredValue(state, \"behavior.transitionSpeed\", transitionMs);\r\n\r\n const shadowValues = getDeclarationValues(signals.declarations, [\"box-shadow\"]);\r\n const hasShadow = shadowValues.length > 0;\r\n maybeSetInferredValue(state, \"layers.baseShadowOpacity\", hasShadow ? 0.2 : 0.08);\r\n\r\n const extractedPaths = Array.from(state.inferredPaths);\r\n const categoryCoverage = extractedPaths.reduce((acc, path) => {\r\n const category = path.split(\".\")[0];\r\n acc[category] = (acc[category] || 0) + 1;\r\n return acc;\r\n }, {});\r\n\r\n const confidence = extractedPaths.length\r\n ? Math.min(0.92, 0.35 + extractedPaths.length * 0.02)\r\n : 0.25;\r\n\r\n return createImportResult({\r\n source: \"html-inference\",\r\n type: String(input.sourceType || \"design-inference\"),\r\n confidence,\r\n issues: extractedPaths.length\r\n ? []\r\n : [{ severity: \"warning\", message: \"Could not infer enough design signals from input.\" }],\r\n designPatch: state.patch,\r\n meta: {\r\n extractedPathCount: extractedPaths.length,\r\n extractedPaths,\r\n categoryCoverage,\r\n colorSampleSize: uniqueColors.length,\r\n backgroundInference: {\r\n source: backgroundPick.source,\r\n candidates: {\r\n root: rootBackgroundCandidates.length,\r\n declaration: backgroundColors.length,\r\n classBased: (signals.classBackgroundColors || []).length,\r\n },\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport function convertHtmlLikeInputToPdsTemplate(input = {}) {\r\n const raw = String(input.input || \"\").trim();\r\n const sourceType = String(input.sourceType || \"unknown\");\r\n\r\n if (!raw) {\r\n return createImportResult({\r\n source: sourceType,\r\n type: sourceType,\r\n confidence: 0,\r\n issues: [{ severity: \"error\", message: \"No input provided.\" }],\r\n meta: {\r\n conversionMode: \"none\",\r\n },\r\n });\r\n }\r\n\r\n if (isLikelyHtml(raw)) {\r\n const converted = convertTailwindHtmlToPds({ html: raw, config: input.config || {} });\r\n return createImportResult({\r\n source: sourceType,\r\n type: sourceType,\r\n confidence: converted.confidence,\r\n issues: converted.issues,\r\n template: converted.template,\r\n meta: {\r\n ...(converted.meta || {}),\r\n conversionMode: \"html-to-pds\",\r\n },\r\n });\r\n }\r\n\r\n return createImportResult({\r\n source: sourceType,\r\n type: sourceType,\r\n confidence: 0.48,\r\n issues: [{ severity: \"info\", message: \"Input is not HTML; generated text-based preview template.\" }],\r\n template: {\r\n id: `${sourceType}-text-import`,\r\n name: \"Imported Guideline Text\",\r\n html: `<article class=\"card surface-base stack-sm\"><h3>Imported Guidelines</h3><pre>${escapeHtml(raw)}</pre></article>`,\r\n },\r\n meta: {\r\n conversionMode: \"text-preview\",\r\n },\r\n });\r\n}\r\n\r\nexport function convertTailwindHtmlToPds(input = {}) {\r\n const html = String(input.html || \"\").trim();\r\n if (!html) {\r\n return createImportResult({\r\n source: \"tailwind\",\r\n type: \"tailwind-html\",\r\n confidence: 0,\r\n issues: [{ severity: \"error\", message: \"No HTML provided.\" }],\r\n });\r\n }\r\n\r\n const conversion = convertHtmlWithRules(html, { config: input.config || {} });\r\n\r\n return createImportResult({\r\n source: \"tailwind\",\r\n type: \"tailwind-html\",\r\n confidence: conversion.confidence,\r\n issues: conversion.issues,\r\n template: {\r\n id: \"tailwind-import\",\r\n name: \"Converted Tailwind Markup\",\r\n html: conversion.html,\r\n },\r\n meta: conversion.meta,\r\n });\r\n}\r\n\r\nexport function convertBrandGuidelinesToPatch(input = {}) {\r\n const text = String(input.text || \"\").trim();\r\n if (!text) {\r\n return createImportResult({\r\n source: \"brand\",\r\n type: \"brand-guidelines\",\r\n confidence: 0,\r\n issues: [{ severity: \"error\", message: \"No brand guideline text provided.\" }],\r\n });\r\n }\r\n\r\n const primary = inferPrimaryColor(text);\r\n const patch = {\r\n colors: {},\r\n typography: {},\r\n };\r\n const issues = [];\r\n\r\n if (primary) {\r\n patch.colors.primary = primary;\r\n } else {\r\n issues.push({\r\n severity: \"warning\",\r\n message: \"No HEX color found; primary color was not inferred.\",\r\n });\r\n }\r\n\r\n if (/serif/i.test(text)) patch.typography.fontFamilyBody = \"Georgia, serif\";\r\n if (/sans[-\\s]?serif/i.test(text)) patch.typography.fontFamilyBody = \"Inter, Arial, sans-serif\";\r\n if (/mono|monospace/i.test(text)) patch.typography.fontFamilyMono = \"JetBrains Mono, monospace\";\r\n\r\n const confidence = primary ? 0.68 : 0.52;\r\n\r\n return createImportResult({\r\n source: \"brand\",\r\n type: \"brand-guidelines\",\r\n confidence,\r\n issues,\r\n designPatch: patch,\r\n meta: {\r\n inferred: {\r\n primaryColor: primary,\r\n },\r\n },\r\n });\r\n}\r\n", "import { createImportResult } from \"./import-contract.js\";\r\nimport {\r\n buildTemplateImportResult,\r\n listLiveTemplates,\r\n loadLiveTemplateCatalog,\r\n} from \"./template-service.js\";\r\nimport {\r\n convertTailwindHtmlToPds,\r\n convertBrandGuidelinesToPatch,\r\n inferPdsDesignFromHtml,\r\n convertHtmlLikeInputToPdsTemplate,\r\n} from \"./conversion-service.js\";\r\nimport { validateDesign } from \"../pds-core/pds-generator.js\";\r\n\r\nconst IMPORT_MODE_CONVERT_ONLY = \"convert-only\";\r\nconst IMPORT_MODE_ADOPT_AND_CONVERT = \"adopt-design-and-convert\";\r\n\r\nfunction normalizeImportMode(value) {\r\n const normalized = String(value || \"\").trim().toLowerCase();\r\n if (normalized === IMPORT_MODE_ADOPT_AND_CONVERT) return IMPORT_MODE_ADOPT_AND_CONVERT;\r\n return IMPORT_MODE_CONVERT_ONLY;\r\n}\r\n\r\nfunction combineIssues(...issueLists) {\r\n const items = issueLists.flat().filter(Boolean);\r\n if (!items.length) return [];\r\n const seen = new Set();\r\n return items.filter((issue) => {\r\n const key = `${String(issue?.severity || \"info\")}::${String(issue?.path || \"\")}::${String(issue?.message || \"\")}`;\r\n if (seen.has(key)) return false;\r\n seen.add(key);\r\n return true;\r\n });\r\n}\r\n\r\nfunction combineConfidence(values = []) {\r\n const list = values.map((value) => Number(value)).filter((value) => Number.isFinite(value));\r\n if (!list.length) return 0;\r\n return Math.max(0, Math.min(1, list.reduce((sum, value) => sum + value, 0) / list.length));\r\n}\r\n\r\nfunction mergeMeta(base = {}, extra = {}) {\r\n return {\r\n ...(base && typeof base === \"object\" ? base : {}),\r\n ...(extra && typeof extra === \"object\" ? extra : {}),\r\n };\r\n}\r\n\r\nfunction deepMerge(target = {}, source = {}) {\r\n if (!source || typeof source !== \"object\") return target;\r\n const out = Array.isArray(target) ? [...target] : { ...target };\r\n Object.entries(source).forEach(([key, value]) => {\r\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\r\n out[key] = deepMerge(\r\n out[key] && typeof out[key] === \"object\" ? out[key] : {},\r\n value\r\n );\r\n } else {\r\n out[key] = value;\r\n }\r\n });\r\n return out;\r\n}\r\n\r\nfunction cloneValue(value) {\r\n if (typeof structuredClone === \"function\") {\r\n try {\r\n return structuredClone(value);\r\n } catch (error) {}\r\n }\r\n return JSON.parse(JSON.stringify(value || {}));\r\n}\r\n\r\nfunction normalizeValidationIssue(issue = {}) {\r\n const ratio = Number(issue?.ratio);\r\n const min = Number(issue?.min);\r\n const ratioLabel = Number.isFinite(ratio) ? ratio.toFixed(2) : \"n/a\";\r\n const minLabel = Number.isFinite(min) ? min.toFixed(2) : \"n/a\";\r\n return {\r\n severity: \"error\",\r\n path: String(issue?.path || \"/colors\"),\r\n message: `${String(issue?.message || \"Color contrast validation failed.\")} (ratio=${ratioLabel}, required=${minLabel})`,\r\n };\r\n}\r\n\r\nfunction validateAdoptedDesignPatch(baseDesign = {}, designPatch = {}, options = {}) {\r\n const patchKeys = designPatch && typeof designPatch === \"object\" ? Object.keys(designPatch) : [];\r\n if (!patchKeys.length) {\r\n return { ok: true, blocked: false, issues: [], report: { ok: true, issues: [] } };\r\n }\r\n\r\n const minContrast = Number(options.minContrast);\r\n const threshold = Number.isFinite(minContrast) ? minContrast : 4.5;\r\n const mergedDesign = deepMerge(cloneValue(baseDesign || {}), cloneValue(designPatch || {}));\r\n const report = validateDesign(mergedDesign, {\r\n minContrast: threshold,\r\n minMutedContrast: 3,\r\n extendedChecks: true,\r\n });\r\n const issues = Array.isArray(report?.issues)\r\n ? report.issues.map((issue) => normalizeValidationIssue(issue))\r\n : [];\r\n\r\n return {\r\n ok: Boolean(report?.ok),\r\n blocked: !report?.ok,\r\n issues,\r\n report: {\r\n ok: Boolean(report?.ok),\r\n minContrast: threshold,\r\n issues: Array.isArray(report?.issues) ? report.issues : [],\r\n },\r\n };\r\n}\r\n\r\nexport function getLiveImportSources() {\r\n return [\r\n { id: \"template\", name: \"Templates\" },\r\n { id: \"tailwind-html\", name: \"Tailwind HTML\" },\r\n { id: \"brand-guidelines\", name: \"Brand Guidelines\" },\r\n { id: \"figma-json\", name: \"Figma Tokens JSON (planned)\" },\r\n { id: \"ux-pilot\", name: \"UX Pilot (planned)\" },\r\n { id: \"google-stitch\", name: \"Google Stitch (planned)\" },\r\n ];\r\n}\r\n\r\nexport async function runLiveImport(request = {}) {\r\n const sourceType = String(request.sourceType || \"\");\r\n const importMode = normalizeImportMode(request.importMode);\r\n const input = String(request.input || \"\");\r\n const config = request.config || null;\r\n\r\n if (sourceType === \"template\") {\r\n const result = buildTemplateImportResult(request.templateId, request);\r\n result.meta = mergeMeta(result.meta, { importMode });\r\n return result;\r\n }\r\n\r\n if (sourceType === \"tailwind-html\") {\r\n const conversionResult = convertTailwindHtmlToPds({ html: input, config });\r\n if (importMode === IMPORT_MODE_CONVERT_ONLY) {\r\n conversionResult.meta = mergeMeta(conversionResult.meta, { importMode });\r\n return conversionResult;\r\n }\r\n\r\n const inferred = inferPdsDesignFromHtml({ html: input, config, sourceType });\r\n const validation = validateAdoptedDesignPatch(config || {}, inferred.designPatch || {});\r\n const safeDesignPatch = validation.blocked ? {} : inferred.designPatch;\r\n const validationIssues = validation.blocked\r\n ? [\r\n {\r\n severity: \"error\",\r\n path: \"/colors\",\r\n message: \"Import blocked: inferred design patch failed accessibility contrast validation.\",\r\n },\r\n ...validation.issues,\r\n ]\r\n : [];\r\n\r\n return createImportResult({\r\n source: conversionResult.source || \"tailwind\",\r\n type: sourceType,\r\n confidence: combineConfidence([conversionResult.confidence, inferred.confidence]),\r\n issues: combineIssues(conversionResult.issues, inferred.issues, validationIssues),\r\n template: conversionResult.template,\r\n designPatch: safeDesignPatch,\r\n meta: mergeMeta(conversionResult.meta, {\r\n importMode,\r\n inference: inferred.meta,\r\n validation: validation.report,\r\n validationBlocked: validation.blocked,\r\n }),\r\n });\r\n }\r\n\r\n if (sourceType === \"brand-guidelines\") {\r\n const templateResult = convertHtmlLikeInputToPdsTemplate({ input, sourceType, config });\r\n if (importMode === IMPORT_MODE_CONVERT_ONLY) {\r\n templateResult.meta = mergeMeta(templateResult.meta, { importMode });\r\n return templateResult;\r\n }\r\n\r\n const heuristicPatch = convertBrandGuidelinesToPatch({ text: input });\r\n const inferred = inferPdsDesignFromHtml({ html: input, config, sourceType });\r\n const designPatch = {\r\n ...(heuristicPatch.designPatch && typeof heuristicPatch.designPatch === \"object\"\r\n ? heuristicPatch.designPatch\r\n : {}),\r\n ...(inferred.designPatch && typeof inferred.designPatch === \"object\" ? inferred.designPatch : {}),\r\n };\r\n const validation = validateAdoptedDesignPatch(config || {}, designPatch || {});\r\n const safeDesignPatch = validation.blocked ? {} : designPatch;\r\n const validationIssues = validation.blocked\r\n ? [\r\n {\r\n severity: \"error\",\r\n path: \"/colors\",\r\n message: \"Import blocked: inferred design patch failed accessibility contrast validation.\",\r\n },\r\n ...validation.issues,\r\n ]\r\n : [];\r\n\r\n return createImportResult({\r\n source: \"brand\",\r\n type: sourceType,\r\n confidence: combineConfidence([\r\n templateResult.confidence,\r\n heuristicPatch.confidence,\r\n inferred.confidence,\r\n ]),\r\n issues: combineIssues(\r\n templateResult.issues,\r\n heuristicPatch.issues,\r\n inferred.issues,\r\n validationIssues\r\n ),\r\n template: templateResult.template,\r\n designPatch: safeDesignPatch,\r\n meta: mergeMeta(templateResult.meta, {\r\n importMode,\r\n inference: inferred.meta,\r\n brandHeuristics: heuristicPatch.meta,\r\n validation: validation.report,\r\n validationBlocked: validation.blocked,\r\n }),\r\n });\r\n }\r\n\r\n if (sourceType === \"figma-json\" || sourceType === \"ux-pilot\" || sourceType === \"google-stitch\") {\r\n return createImportResult({\r\n source: sourceType,\r\n type: sourceType,\r\n confidence: 0,\r\n issues: [\r\n {\r\n severity: \"info\",\r\n message: `${sourceType} adapter is not implemented yet in this phase.`,\r\n },\r\n ],\r\n meta: { importMode },\r\n });\r\n }\r\n\r\n return createImportResult({\r\n source: sourceType || \"unknown\",\r\n type: \"unknown\",\r\n confidence: 0,\r\n issues: [{ severity: \"error\", message: \"Unsupported import source type.\" }],\r\n meta: { importMode },\r\n });\r\n}\r\n\r\nexport { listLiveTemplates };\r\nexport { loadLiveTemplateCatalog };\r\n", "const IMPORT_HISTORY_DB_NAME = \"pds-live-import-history\";\r\nconst IMPORT_HISTORY_DB_VERSION = 1;\r\nconst IMPORT_HISTORY_STORE = \"imports\";\r\n\r\nlet dbPromise = null;\r\n\r\nfunction supportsIndexedDb() {\r\n return typeof globalThis !== \"undefined\" && typeof globalThis.indexedDB !== \"undefined\";\r\n}\r\n\r\nfunction sanitizeText(value) {\r\n return typeof value === \"string\" ? value : \"\";\r\n}\r\n\r\nfunction sanitizeArray(value) {\r\n return Array.isArray(value) ? value : [];\r\n}\r\n\r\nfunction sanitizeObject(value) {\r\n return value && typeof value === \"object\" ? value : {};\r\n}\r\n\r\nfunction openDb() {\r\n if (!supportsIndexedDb()) return Promise.resolve(null);\r\n if (dbPromise) return dbPromise;\r\n\r\n dbPromise = new Promise((resolve, reject) => {\r\n const request = globalThis.indexedDB.open(IMPORT_HISTORY_DB_NAME, IMPORT_HISTORY_DB_VERSION);\r\n\r\n request.onupgradeneeded = () => {\r\n const db = request.result;\r\n if (!db.objectStoreNames.contains(IMPORT_HISTORY_STORE)) {\r\n const store = db.createObjectStore(IMPORT_HISTORY_STORE, {\r\n keyPath: \"id\",\r\n autoIncrement: true,\r\n });\r\n store.createIndex(\"createdAt\", \"createdAt\", { unique: false });\r\n store.createIndex(\"sourceType\", \"sourceType\", { unique: false });\r\n store.createIndex(\"fileName\", \"fileName\", { unique: false });\r\n }\r\n };\r\n\r\n request.onsuccess = () => resolve(request.result);\r\n request.onerror = () => reject(request.error || new Error(\"Failed to open import history database.\"));\r\n });\r\n\r\n return dbPromise;\r\n}\r\n\r\nfunction requestToPromise(request) {\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = () => resolve(request.result);\r\n request.onerror = () => reject(request.error || new Error(\"IndexedDB operation failed.\"));\r\n });\r\n}\r\n\r\nfunction normalizeHistoryEntry(input = {}) {\r\n const now = Date.now();\r\n const createdAt = Number.isFinite(Number(input.createdAt)) ? Number(input.createdAt) : now;\r\n const createdAtIso = new Date(createdAt).toISOString();\r\n\r\n const issues = sanitizeArray(input.issues).map((issue) => ({\r\n severity: sanitizeText(issue?.severity || \"info\"),\r\n message: sanitizeText(issue?.message || \"\"),\r\n }));\r\n\r\n const notes = sanitizeArray(input.notes).filter((note) => typeof note === \"string\");\r\n const unknownTailwindTokens = sanitizeArray(input.unknownTailwindTokens).filter(\r\n (token) => typeof token === \"string\"\r\n );\r\n const appliedRules = sanitizeArray(input.appliedRules).filter((rule) => typeof rule === \"string\");\r\n\r\n return {\r\n createdAt,\r\n createdAtIso,\r\n sourceType: sanitizeText(input.sourceType || \"unknown\"),\r\n importMode: sanitizeText(input.importMode || \"convert-only\"),\r\n source: sanitizeText(input.source || \"unknown\"),\r\n type: sanitizeText(input.type || \"unknown\"),\r\n fileName: sanitizeText(input.fileName || \"\"),\r\n fileSize: Number.isFinite(Number(input.fileSize)) ? Number(input.fileSize) : 0,\r\n mimeType: sanitizeText(input.mimeType || \"\"),\r\n fileContents: sanitizeText(input.fileContents || \"\"),\r\n convertedHtml: sanitizeText(input.convertedHtml || \"\"),\r\n confidence: Number.isFinite(Number(input.confidence)) ? Number(input.confidence) : 0,\r\n notes,\r\n issues,\r\n coverage: sanitizeObject(input.coverage),\r\n unknownTailwindTokens,\r\n appliedRules,\r\n importStyleSheetInjected: Boolean(input.importStyleSheetInjected),\r\n templateName: sanitizeText(input.templateName || \"\"),\r\n designPatch: sanitizeObject(input.designPatch),\r\n meta: sanitizeObject(input.meta),\r\n resultSnapshot: sanitizeObject(input.resultSnapshot),\r\n };\r\n}\r\n\r\nexport async function saveLiveImportHistory(input = {}) {\r\n const db = await openDb();\r\n if (!db) return null;\r\n\r\n const entry = normalizeHistoryEntry(input);\r\n const tx = db.transaction(IMPORT_HISTORY_STORE, \"readwrite\");\r\n const store = tx.objectStore(IMPORT_HISTORY_STORE);\r\n const id = await requestToPromise(store.add(entry));\r\n\r\n return { id, ...entry };\r\n}\r\n\r\nexport async function listLiveImportHistory(options = {}) {\r\n const db = await openDb();\r\n if (!db) return [];\r\n\r\n const limit = Number.isFinite(Number(options.limit)) ? Math.max(1, Number(options.limit)) : 30;\r\n const tx = db.transaction(IMPORT_HISTORY_STORE, \"readonly\");\r\n const store = tx.objectStore(IMPORT_HISTORY_STORE);\r\n const items = (await requestToPromise(store.getAll())) || [];\r\n\r\n return items\r\n .sort((a, b) => Number(b?.createdAt || 0) - Number(a?.createdAt || 0))\r\n .slice(0, limit);\r\n}\r\n\r\nexport async function getLiveImportHistoryEntry(id) {\r\n const db = await openDb();\r\n if (!db) return null;\r\n\r\n const parsedId = Number(id);\r\n if (!Number.isFinite(parsedId)) return null;\r\n\r\n const tx = db.transaction(IMPORT_HISTORY_STORE, \"readonly\");\r\n const store = tx.objectStore(IMPORT_HISTORY_STORE);\r\n const entry = await requestToPromise(store.get(parsedId));\r\n return entry || null;\r\n}\r\n\r\nexport async function clearLiveImportHistory() {\r\n const db = await openDb();\r\n if (!db) return;\r\n\r\n const tx = db.transaction(IMPORT_HISTORY_STORE, \"readwrite\");\r\n const store = tx.objectStore(IMPORT_HISTORY_STORE);\r\n await requestToPromise(store.clear());\r\n}\r\n"],
|
|
5
|
-
"mappings": "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AAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,eAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,MAAM,CAAC,YAAY,SAAS,SAAS,WAAW;AAAA,MAChD,UAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,YAAY;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAuG6C,kBAAkB;AAAA,6BACvC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAQM,kBAAkB;AAAA,6BACvC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDASM,kBAAkB;AAAA,6BACvC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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IAAI;AAAA,IACN;AAEA;AAAA;AAAA,MAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAoME,YAAY,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAwOT,YAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmEnC;AAAA,EAEA,2BAA2B;AACzB;AAAA;AAAA,MAAc;AAAA;AAAA,EAChB,KAAK,4BAA4B,CAAC;AAAA;AAAA,EAElC,KAAK,oBAAoB,CAAC;AAAA;AAAA,EAE1B,KAAK,uBAAuB,CAAC;AAAA;AAAA,EAE7B,KAAK,qBAAqB,CAAC;AAAA;AAAA,EAE3B,KAAK,sBAAsB,CAAC;AAAA;AAAA,EAE5B,KAAK,yBAAyB,CAAC;AAAA;AAAA,EAE/B,KAAK,wBAAwB,CAAC;AAAA;AAAA,EAE9B,KAAK,wBAAwB,CAAC;AAAA;AAAA,EAE9B,KAAK,qBAAqB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0C3B,KAAK,yBAAyB,CAAC;AAAA;AAAA,EAE/B,KAAK,gCAAgC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAGtC;AAAA,EAEA,0BAA0B;AACxB;AAAA;AAAA,MAAe;AAAA;AAAA,EACjB,KAAK,oBAAoB,CAAC;AAAA;AAAA,EAE1B,KAAK,yBAAyB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAK/B,KAAK,gCAAgC,CAAC;AAAA,EACtC,KAAK,4BAA4B,CAAC;AAAA;AAAA,EAElC,KAAK,iCAAiC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+LvC,KAAK,wBAAwB,CAAC;AAAA;AAAA,EAE9B,KAAK,sBAAsB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAG5B;AAAA;AAAA;AAAA;AAAA,EAKA,kCAAkC;AAChC,SAAK,eAAe;AAAA,MAClB,QAAQ,IAAI,cAAc;AAAA,MAC1B,YAAY,IAAI,cAAc;AAAA,MAC9B,YAAY,IAAI,cAAc;AAAA,MAC9B,WAAW,IAAI,cAAc;AAAA,IAC/B;AACA,SAAK,gCAAgC;AAAA,EACvC;AAAA,EAEA,kCAAkC;AAChC,SAAK,aAAa,OAAO,YAAY,KAAK,QAAQ,MAAM;AACxD,SAAK,aAAa,WAAW,YAAY,KAAK,QAAQ,UAAU;AAChE,SAAK,aAAa,WAAW,YAAY,KAAK,QAAQ,UAAU;AAChE,SAAK,aAAa,UAAU,YAAY,KAAK,QAAQ,SAAS;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0DA,IAAI,YAAY;AACd,WAAO,KAAK,SAAS,UAAU;AAAA,EACjC;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,SAAS,cAAc;AAAA,EACrC;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,SAAS,cAAc;AAAA,EACrC;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,SAAS,aAAa;AAAA,EACpC;AAAA,EACA,IAAI,aAAa;AACf,QAAI,CAAC,KAAK;AAAS,aAAO;AAE1B,WAAO,GAAG,KAAK,QAAQ,MAAM;AAAA,EAAK,KAAK,QAAQ,UAAU;AAAA,EACvD,KAAK,QAAQ,UACf;AAAA,EAAK,KAAK,QAAQ,SAAS;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAW;AACb,WAAO;AAAA;AAAA,MAEL,QAAQ;AAAA,QACN,QAAQ,KAAK,OAAO;AAAA,QACpB,SAAS,KAAK,OAAO;AAAA,QACrB,QAAQ,KAAK,OAAO;AAAA,QACpB,cAAc,KAAK,OAAO;AAAA,QAC1B,YAAY,KAAK,OAAO;AAAA,QACxB,SAAS,KAAK,OAAO;AAAA,QACrB,QAAQ,KAAK,OAAO;AAAA,QACpB,aAAa,KAAK,OAAO;AAAA,QACzB,QAAQ,KAAK,OAAO;AAAA,QACpB,OAAO,KAAK,OAAO;AAAA,MACrB;AAAA;AAAA,MAGA,QAAQ;AAAA,QACN,QAAQ;AAAA,UACN,KAAK,KAAK,SAAS,UAAU;AAAA,UAC7B,MAAM,KAAK,SAAS,QAAQ,UAAU;AAAA,UACtC,UAAU,KAAK,SAAS,QAAQ,UAAU,KAAK,MAAM,QAAQ,CAAC;AAAA,QAChE;AAAA,QACA,YAAY;AAAA,UACV,KAAK,KAAK,SAAS,cAAc;AAAA,UACjC,MAAM,KAAK,SAAS,YAAY,UAAU;AAAA,UAC1C,UAAU,KAAK,SAAS,YAAY,UAAU,KAAK,MAAM,QAAQ,CAAC;AAAA,QACpE;AAAA,QACA,YAAY;AAAA,UACV,KAAK,KAAK,SAAS,cAAc;AAAA,UACjC,MAAM,KAAK,SAAS,YAAY,UAAU;AAAA,UAC1C,UAAU,KAAK,SAAS,YAAY,UAAU,KAAK,MAAM,QAAQ,CAAC;AAAA,QACpE;AAAA,QACA,WAAW;AAAA,UACT,KAAK,KAAK,SAAS,aAAa;AAAA,UAChC,MAAM,KAAK,SAAS,WAAW,UAAU;AAAA,UACzC,UAAU,KAAK,SAAS,WAAW,UAAU,KAAK,MAAM,QAAQ,CAAC;AAAA,QACnE;AAAA,QACA,UAAU;AAAA,UACR,KAAK,KAAK;AAAA,UACV,MAAM,KAAK,YAAY,UAAU;AAAA,UACjC,UAAU,KAAK,YAAY,UAAU,KAAK,MAAM,QAAQ,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA;AAAA,MAGA,QAAQ;AAAA,QACN,QAAQ,KAAK,QAAQ,UAAU,CAAC;AAAA,QAChC,QAAQ,KAAK,QAAQ,UAAU;AAAA,QAC/B,OAAO,KAAK,QAAQ,SAAS;AAAA,MAC/B;AAAA;AAAA,MAGA,cAAc;AAAA,QACZ,0BAA0B,OAAO,kBAAkB;AAAA,QACnD,UAAU,OAAO,SAAS,eAAe,OAAO,QAAQ;AAAA,QACxD,WAAW,OAAO,eAAe;AAAA,MACnC;AAAA;AAAA,MAGA,YAAY;AAAA;AAAA,QAEV,UAAU,OAAO,aAAa,cAAc,WAAW;AAAA;AAAA,QAEvD,OAAO,OAAO,UAAU,cAAc,QAAQ;AAAA,MAChD;AAAA;AAAA,MAGA,MAAM;AAAA,QACJ,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,QACpC,YACG,KAAK,SAAS,QAAQ,UAAU,MAChC,KAAK,SAAS,YAAY,UAAU,MACpC,KAAK,SAAS,YAAY,UAAU,MACpC,KAAK,SAAS,WAAW,UAAU;AAAA,QACtC,gBACI,KAAK,SAAS,QAAQ,UAAU,MAC/B,KAAK,SAAS,YAAY,UAAU,MACpC,KAAK,SAAS,YAAY,UAAU,MACpC,KAAK,SAAS,WAAW,UAAU,MACtC,MACA,QAAQ,CAAC;AAAA,QACX,YAAY;AAAA,QACZ,aAAa,OAAO,KAAK,KAAK,MAAM,EAAE;AAAA,MACxC;AAAA;AAAA,MAGA,SAAS;AAAA;AAAA;AAAA;AAAA,QAIP,gBAAgB,MAAM;AACpB,gBAAM,SAAS,CAAC;AAChB,gBAAM,SAAS,KAAK,OAAO;AAC3B,qBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,gBAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,qBAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,YAC7B;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,eAAe,CAAC,SAAS;AACvB,iBAAO,KAAK,OAAO,OAAO,IAAI,KAAK;AAAA,QACrC;AAAA;AAAA;AAAA;AAAA,QAKA,kBAAkB,MAAM;AACtB,iBAAO,OAAO,QAAQ,KAAK,OAAO,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,YAChE;AAAA,YACA;AAAA,UACF,EAAE;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA,QAKA,eAAe,MAAM;AACnB,iBAAO,KAAK,OAAO;AAAA,QACrB;AAAA;AAAA;AAAA;AAAA,QAKA,aAAa,CAAC,UAAU;AACtB,gBAAM,cAAc;AAAA,YAClB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,CAAC,YAAY,SAAS,KAAK,GAAG;AAChC,kBAAM,IAAI;AAAA,cACR,kBAAkB,KAAK,oBAAoB,YAAY;AAAA,gBACrD;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AACA,iBAAO,KAAK,UAAU,KAAK,KAAK;AAAA,QAClC;AAAA;AAAA;AAAA;AAAA,QAKA,eAAe,CAAC,WAAW,UAAU;AACnC,gBAAM,SAAS,KAAK,QAAQ,UAAU,CAAC;AAEvC,gBAAM,YAAY,KAAK,UAAU,MAAM;AACvC,iBAAO,UAAU,SAAS,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,mBAAmB;AACrB,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EACA,IAAI,uBAAuB;AACzB,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EACA,IAAI,uBAAuB;AACzB,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EACA,IAAI,sBAAsB;AACxB,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,gBAAgB;AACd,WAAO;AAAA,MACL,qBAAqB,KAAK;AAAA,QACxB;AAAA,QACA,KAAK,QAAQ;AAAA,MACf;AAAA,MACA,yBAAyB,KAAK;AAAA,QAC5B;AAAA,QACA,KAAK,QAAQ;AAAA,MACf;AAAA,MACA,yBAAyB,KAAK;AAAA,QAC5B;AAAA,QACA,KAAK,QAAQ;AAAA,MACf;AAAA,MACA,wBAAwB,KAAK;AAAA,QAC3B;AAAA,QACA,KAAK,QAAQ;AAAA,MACf;AAAA,MACA,qBAAqB,KAAK,mBAAmB,UAAU,KAAK,UAAU;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,mBAAmB,MAAM,KAAK;AAE5B,UAAM,aAAa,IAChB,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,KAAK,EACnB,QAAQ,OAAO,KAAK;AAEvB,WAAO,2BAA2B,IAAI;AAAA;AAAA;AAAA,eAG3B,IAAI;AAAA,EACjB,IAAI,kBAAkB,UAAU;AAAA;AAAA,eAEnB,IAAI,WAAW,UAAU;AAAA;AAAA,EAEtC;AACF;AAcO,SAAS,eAAe,eAAe,CAAC,GAAG,UAAU,CAAC,GAAG;AAC9D,QAAM,MAAM,OAAO,QAAQ,eAAe,GAAG;AAC7C,QAAM,YAAY,OAAO,QAAQ,oBAAoB,CAAG;AACxD,QAAM,WAAW,QAAQ,QAAQ,cAAc;AAC/C,QAAM,4BAA4B,QAAQ,mBAAmB;AAC7D,QAAM,gBAAgB,OAAO,SAAS,OAAO,QAAQ,WAAW,CAAC,IAC7D,OAAO,QAAQ,WAAW,IAC1B;AACJ,QAAM,0BAA0B,OAAO;AAAA,IACrC,OAAO,QAAQ,0BAA0B;AAAA,EAC3C,IACI,OAAO,QAAQ,0BAA0B,IACzC;AAGJ,QAAM,eAAe,CAAC,QAAQ;AAC5B,UAAM,MAAM,OAAO,OAAO,EAAE,EAAE,KAAK;AACnC,UAAM,IAAI,IAAI,MAAM,qCAAqC;AACzD,QAAI,CAAC;AAAG,aAAO;AACf,UAAM,OAAO,EAAE,CAAC;AAChB,UAAM,OACJ,KAAK,WAAW,IACZ,KACG,MAAM,EAAE,EACR,IAAI,CAAC,MAAM,IAAI,CAAC,EAChB,KAAK,EAAE,IACV;AACN,WAAO,IAAI,KAAK,YAAY,CAAC;AAAA,EAC/B;AACA,QAAM,WAAW,CAAC,QAAQ;AACxB,UAAM,aAAa,aAAa,GAAG;AACnC,QAAI,CAAC;AAAY,aAAO;AACxB,UAAM,IAAI,WAAW,QAAQ,KAAK,EAAE;AACpC,UAAM,OACJ,EAAE,WAAW,IACT,EACG,MAAM,EAAE,EACR,IAAI,CAAC,MAAM,IAAI,CAAC,EAChB,KAAK,EAAE,IACV;AACN,UAAM,MAAM,SAAS,QAAQ,KAAK,EAAE;AACpC,WAAO,EAAE,GAAI,OAAO,KAAM,KAAK,GAAI,OAAO,IAAK,KAAK,GAAG,MAAM,IAAI;AAAA,EACnE;AACA,QAAM,YAAY,CAAC,QAAQ;AACzB,UAAM,MAAM,SAAS,GAAG;AACxB,QAAI,CAAC;AAAK,aAAO;AACjB,UAAM,EAAE,GAAG,GAAG,EAAE,IAAI;AACpB,UAAM,OAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE;AAAA,MAAI,CAAC,MAC5C,KAAK,UAAU,IAAI,QAAQ,KAAK,KAAK,IAAI,SAAS,OAAO,GAAG;AAAA,IAC9D;AACA,WAAO,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;AAAA,EAC9D;AACA,QAAM,WAAW,CAAC,GAAG,MAAM;AACzB,QAAI,CAAC,KAAK,CAAC;AAAG,aAAO;AACrB,UAAM,KAAK,UAAU,CAAC;AACtB,UAAM,KAAK,UAAU,CAAC;AACtB,UAAM,UAAU,KAAK,IAAI,IAAI,EAAE;AAC/B,UAAM,SAAS,KAAK,IAAI,IAAI,EAAE;AAC9B,YAAQ,UAAU,SAAS,SAAS;AAAA,EACtC;AACA,QAAM,WAAW,CAAC,QAAQ;AACxB,UAAM,MAAM,SAAS,GAAG;AACxB,QAAI,CAAC;AAAK,aAAO;AACjB,UAAM,IAAI,IAAI,IAAI;AAClB,UAAM,IAAI,IAAI,IAAI;AAClB,UAAM,IAAI,IAAI,IAAI;AAClB,UAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,UAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,UAAM,QAAQ,MAAM;AAEpB,QAAI,IAAI;AACR,QAAI,UAAU,GAAG;AACf,UAAI,QAAQ;AAAG,aAAM,IAAI,KAAK,QAAS;AAAA,eAC9B,QAAQ;AAAG,aAAK,IAAI,KAAK,QAAQ;AAAA;AACrC,aAAK,IAAI,KAAK,QAAQ;AAC3B,WAAK;AACL,UAAI,IAAI;AAAG,aAAK;AAAA,IAClB;AAEA,UAAM,KAAK,MAAM,OAAO;AACxB,UAAM,IACJ,UAAU,IAAI,IAAI,SAAS,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC;AAEnD,WAAO,EAAE,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI;AAAA,EACrC;AACA,QAAM,WAAW,CAAC,IAAI,OAAO;AAC3B,QAAI,CAAC,OAAO,SAAS,EAAE,KAAK,CAAC,OAAO,SAAS,EAAE;AAAG,aAAO;AACzD,UAAM,OAAO,KAAK,IAAI,KAAK,EAAE;AAC7B,WAAO,KAAK,IAAI,MAAM,MAAM,IAAI;AAAA,EAClC;AAEA,QAAM,SAAS,CAAC;AAChB,QAAM,WAAW,CAAC;AAClB,MAAI;AAEF,UAAM,MAAM,IAAI,UAAU,EAAE,QAAQ,gBAAgB,YAAY,EAAE,CAAC;AACnE,UAAM,IAAI,IAAI,OAAO;AAGrB,UAAM,QAAQ;AAAA,MACZ,WAAW,EAAE,SAAS;AAAA,MACtB,aAAa,EAAE,OAAO,GAAG,KAAK;AAAA,MAC9B,sBAAsB,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG;AAAA,MACpE,kBAAkB,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG;AAAA,MAChE,iBAAiB,EAAE,SAAS,YAAY,EAAE,SAAS;AAAA,MACnD,aAAa,EAAE,aAAa,OAAO,QAAQ,EAAE,UAAU,GAAG;AAAA,MAC1D,aAAa,EAAE,aAAa,OAAO,QAAQ,EAAE,UAAU,GAAG;AAAA,MAC1D,YAAY,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG;AAAA,MAC7C,aAAa,EAAE,UAAU,GAAG,KAAK,EAAE,UAAU,GAAG;AAAA,MAChD,aAAa,EAAE,UAAU,GAAG,KAAK,EAAE,UAAU,GAAG;AAAA,MAChD,YAAY,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG;AAAA,MAC7C,UAAU,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG;AAAA,IACzC;AAEA,UAAM,mBAAmB,CAAC,OAAO,KAAK,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,IAAI,SAAS,CAAC;AAG1F,UAAM,gBAAgB,SAAS,MAAM,aAAa,SAAS;AAC3D,QAAI,gBAAgB,KAAK;AACvB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,SAAS,mDAAmD,cAAc;AAAA,UACxE;AAAA,QACF,CAAC,MAAM,GAAG;AAAA,QACV,OAAO;AAAA,QACP,KAAK;AAAA,QACL,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAGA,UAAM,iBAAiB,SAAS,MAAM,WAAW,MAAM,WAAW;AAClE,QAAI,iBAAiB,KAAK;AACxB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,SAAS,qDAAqD,eAAe;AAAA,UAC3E;AAAA,QACF,CAAC,MAAM,GAAG;AAAA,QACV,OAAO;AAAA,QACP,KAAK;AAAA,QACL,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,UAAU;AAEZ,YAAM,sBAAsB,SAAS,MAAM,WAAW,MAAM,oBAAoB;AAChF,UAAI,sBAAsB,KAAK;AAC7B,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,SAAS,+DAA+D,oBAAoB;AAAA,YAC1F;AAAA,UACF,CAAC,MAAM,GAAG;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,UACL,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAGA,YAAM,kBAAkB,SAAS,MAAM,WAAW,MAAM,gBAAgB;AACxE,UAAI,kBAAkB,WAAW;AAC/B,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,SAAS,2DAA2D,gBAAgB;AAAA,YAClF;AAAA,UACF,CAAC,MAAM,SAAS;AAAA,UAChB,OAAO;AAAA,UACP,KAAK;AAAA,UACL,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAGA,YAAM,oBAAoB,SAAS,MAAM,iBAAiB,MAAM,WAAW;AAC3E,UAAI,oBAAoB,KAAK;AAC3B,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,SAAS,sDAAsD,kBAAkB;AAAA,YAC/E;AAAA,UACF,CAAC,MAAM,GAAG;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,UACL,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF;AAGA,UAAM,oBAAoB,SAAS,MAAM,aAAa,MAAM,SAAS;AACrE,QAAI,oBAAoB,KAAK;AAC3B,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,SAAS,uEAAuE,kBAAkB;AAAA,UAChG;AAAA,QACF,CAAC,MAAM,GAAG;AAAA,QACV,OAAO;AAAA,QACP,KAAK;AAAA,QACL,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,UAAU;AAEZ,YAAM,gBAAgB;AAAA,QACpB,EAAE,MAAM,kBAAkB,KAAK,UAAU,OAAO,MAAM,WAAW;AAAA,QACjE,EAAE,MAAM,mBAAmB,KAAK,WAAW,OAAO,MAAM,YAAY;AAAA,QACpE,EAAE,MAAM,mBAAmB,KAAK,WAAW,OAAO,MAAM,YAAY;AAAA,QACpE,EAAE,MAAM,kBAAkB,KAAK,UAAU,OAAO,MAAM,WAAW;AAAA,QACjE,EAAE,MAAM,gBAAgB,KAAK,QAAQ,OAAO,MAAM,SAAS;AAAA,MAC7D;AACA,oBAAc,QAAQ,CAAC,UAAU;AAC/B,YAAI,CAAC,OAAO;AAAO;AACnB,cAAM,QAAQ,iBAAiB,MAAM,KAAK;AAC1C,YAAI,QAAQ,KAAK;AACf,iBAAO,KAAK;AAAA,YACV,MAAM,MAAM;AAAA,YACZ,SAAS,GAAG,MAAM,GAAG,wDAAwD,MAAM;AAAA,cACjF;AAAA,YACF,CAAC,MAAM,GAAG;AAAA,YACV;AAAA,YACA,KAAK;AAAA,YACL,SAAS,SAAS,MAAM,GAAG;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAGA,UAAM,IAAI,EAAE;AACZ,QAAI,GAAG;AACL,YAAM,OAAO;AAAA,QACX,WAAW,EAAE,SAAS,QAAQ,EAAE,SAAS;AAAA,QACzC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;AAAA,QAC9C,kBAAkB,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG;AAAA,QAChE,aAAa,EAAE,aAAa,MAAM,QAAQ,EAAE,UAAU,GAAG;AAAA,QACzD,aAAa,EAAE,aAAa,MAAM,QAAQ,EAAE,UAAU,GAAG;AAAA,MAC3D;AAGA,YAAM,eAAe,SAAS,KAAK,aAAa,SAAS;AACzD,UAAI,eAAe,KAAK;AACtB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,SAAS,kDAAkD,aAAa;AAAA,YACtE;AAAA,UACF,CAAC,MAAM,GAAG;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,UACL,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAGA,YAAM,mBAAmB,SAAS,KAAK,aAAa,KAAK,SAAS;AAClE,UAAI,mBAAmB,KAAK;AAC1B,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,SAAS,sEAAsE,iBAAiB;AAAA,YAC9F;AAAA,UACF,CAAC,MAAM,GAAG;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,UACL,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAEA,UAAI,UAAU;AACZ,cAAM,gBAAgB,SAAS,KAAK,WAAW,KAAK,WAAW;AAC/D,YAAI,gBAAgB,KAAK;AACvB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,SAAS,oDAAoD,cAAc;AAAA,cACzE;AAAA,YACF,CAAC,MAAM,GAAG;AAAA,YACV,OAAO;AAAA,YACP,KAAK;AAAA,YACL,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAEA,cAAM,iBAAiB,SAAS,KAAK,WAAW,KAAK,gBAAgB;AACrE,YAAI,iBAAiB,WAAW;AAC9B,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,SAAS,qDAAqD,eAAe;AAAA,cAC3E;AAAA,YACF,CAAC,MAAM,SAAS;AAAA,YAChB,OAAO;AAAA,YACP,KAAK;AAAA,YACL,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,QAAI,2BAA2B;AAC7B,YAAM,aAAa,cAAc,UAAU,CAAC;AAC5C,YAAM,iBAAiB,YAAY,YAAY,CAAC;AAChD,YAAM,WAAW,CAAC,WAAW,aAAa,QAAQ;AAElD,eAAS,QAAQ,CAAC,WAAW;AAC3B,cAAM,YAAY,aAAa,MAAM;AACrC,cAAM,eAAe,iBAAiB,MAAM;AAC5C,YAAI,CAAC,aAAa,CAAC;AAAc;AAEjC,cAAM,WAAW,SAAS,SAAS;AACnC,cAAM,UAAU,SAAS,YAAY;AACrC,YAAI,CAAC,YAAY,CAAC;AAAS;AAG3B,YACE,SAAS,IAAI,2BACb,QAAQ,IAAI,yBACZ;AACA;AAAA,QACF;AAEA,cAAM,QAAQ,SAAS,SAAS,GAAG,QAAQ,CAAC;AAC5C,YAAI,SAAS,QAAQ,SAAS;AAAe;AAE7C,iBAAS,KAAK;AAAA,UACZ,MAAM,oBAAoB,MAAM;AAAA,UAChC,SAAS,aAAa,MAAM,eAAe,MAAM;AAAA,YAC/C;AAAA,UACF,CAAC,kBAAkB,MAAM,KAAK,SAAS,EAAE;AAAA,YACvC;AAAA,UACF,CAAC,UAAU,QAAQ,EAAE;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,UACD,SAAS,qBAAqB,MAAM;AAAA,QACtC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS,sBAAsB,OAAO,KAAK,WAAW,GAAG,CAAC;AAAA,MAC1D,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,IAAI,OAAO,WAAW,GAAG,QAAQ,SAAS;AACrD;;;AC9zMA,IAAM,yBAAyB,oBAAI,IAAI,CAAC,OAAO,QAAQ,SAAS,SAAS,MAAM,CAAC;AAChF,IAAM,sBAAsB;AAE5B,IAAI,gBAAgB;AACpB,IAAI,oBAAoB;AAExB,SAAS,qBAAqB;AAC5B,MAAI;AACF,UAAM,QAAQ,OAAO,eAAe,cAAc,aAAa;AAC/D,UAAM,YAAY,QAAQ,mBAAmB;AAC7C,QAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,aAAO;AAAA,IACT;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,SAAS;AACnC,MAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,MAAM,QAAQ,SAAS,UAAU,QAAQ,SAAS,WAAW,QAAQ,OAAO;AAAA,IAC5E,OAAO,QAAQ,UAAU;AAAA,IACzB,SAAS,QAAQ;AAAA,EACnB;AACF;AAEA,SAAS,iBAAiB,OAAO;AAC/B,MAAI,OAAO,UAAU;AAAU,WAAO;AACtC,QAAM,aAAa,MAAM,YAAY;AACrC,SAAO,uBAAuB,IAAI,UAAU,IAAI,aAAa;AAC/D;AAEA,SAAS,mBAAmB;AAC1B,MAAI,OAAO,sBAAsB,YAAY;AAC3C,QAAI;AACF,YAAM,oBAAoB,mBAAmB,kBAAkB,CAAC;AAChE,UAAI,mBAAmB;AACrB,eAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AAAA,IAAC;AAAA,EACnB;AAEA,QAAM,YAAY,mBAAmB;AACrC,MAAI,WAAW;AACb,UAAM,OACJ,WAAW,QACX,WAAW,UAAU,SACpB,WAAW,UAAU,SAAS,SAAS;AAC1C,UAAM,SACH,WAAW,SACV,WAAW,eAAe,SAC1B,WAAW,eAAe,QAAQ,SAClC,WAAW,UAAU,SACrB,WAAW,UAAU,QAAQ,SAC7B,WAAW;AACf,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,MAAM,OAAO,MAAM;AACpC;AAEA,SAAS,kBAAkB;AACzB,MAAI,OAAO,kBAAkB,YAAY;AACvC,QAAI;AACF,YAAM,SAAS,cAAc;AAC7B,UAAI,OAAO,WAAW,YAAY;AAChC,eAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AAAA,IAAC;AAAA,EACnB;AAEA,QAAM,YAAY,mBAAmB;AACrC,MAAI,OAAO,WAAW,eAAe,YAAY;AAC/C,WAAO,UAAU;AAAA,EACnB;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,OAAO,YAAY,MAAM;AAC7C,MAAI,OAAO,YAAY;AAAa;AACpC,QAAM,SACJ,OAAO,QAAQ,KAAK,MAAM,aACtB,QAAQ,KAAK,EAAE,KAAK,OAAO,IAC3B,OAAO,QAAQ,QAAQ,aACrB,QAAQ,IAAI,KAAK,OAAO,IACxB;AACR,MAAI,CAAC;AAAQ;AAEb,MAAI,KAAK,SAAS,GAAG;AACnB,WAAO,SAAS,GAAG,IAAI;AAAA,EACzB,OAAO;AACL,WAAO,OAAO;AAAA,EAChB;AACF;AAEA,SAAS,2BAA2B,OAAO,SAAS;AAClD,QAAM,eAAe,SAAS,UAAU;AACxC,QAAM,aAAa,SAAS,SAAS;AAErC,MAAI,cAAc,CAAC,cAAc;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,gBAAgB,UAAU,WAAW,UAAU,QAAQ;AAC1D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,mBAAmB,EAAE,WAAW,WAAW,IAAI,CAAC,GAAG;AACjE,kBAAgB,OAAO,cAAc,aAAa,YAAY;AAC9D,sBAAoB,OAAO,eAAe,aAAa,aAAa;AACtE;AAEO,SAAS,OAAO,QAAQ,OAAO,YAAY,MAAM;AACtD,QAAM,kBAAkB,iBAAiB,KAAK;AAC9C,QAAM,UAAU,iBAAiB;AACjC,QAAM,eAAe,gBAAgB;AAErC,MAAI,cAAc;AAChB,QAAI;AACF,mBAAa,KAAK,SAAS,SAAS,iBAAiB,SAAS,GAAG,IAAI;AACrE;AAAA,IACF,SAAS,OAAO;AACd,mBAAa,SAAS,8BAA8B,KAAK;AAAA,IAC3D;AAAA,EACF;AAEA,MAAI,CAAC,2BAA2B,iBAAiB,OAAO,GAAG;AACzD;AAAA,EACF;AAEA,eAAa,iBAAiB,SAAS,GAAG,IAAI;AAChD;;;AC7IA,IAAM,qBAAqB;AAE3B,IAAM,sBAAsB;AAAA,EAC1B,eAAe;AAAA,EACf,UAAU;AAAA,EACV,kBAAkB,oBAAI,IAAI;AAAA,EAC1B,iBAAiB,oBAAI,IAAI;AAAA,EACzB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,eAAe,oBAAI,IAAI;AAAA,EACvB,gBAAgB,oBAAI,QAAQ;AAAA,EAC5B,iBAAiB,oBAAI,QAAQ;AAAA,EAC7B,aAAa,oBAAI,IAAI;AAAA,EACrB,iBAAiB,oBAAI,IAAI;AAC3B;AAEA,IAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,gBAAgB,CAAC,QACrB,QAAQ,GAAG,KAAK,OAAO,QAAQ,YAAY,OAAO,QAAQ,YAAY,YAAY;AAEpF,SAAS,kBAAkB,QAAQ;AACjC,SAAO,OAAO,UAAU,EAAE,EAAE,KAAK,EAAE,YAAY;AACjD;AAEA,SAAS,eAAe,QAAQ;AAC9B,QAAM,aAAa,kBAAkB,MAAM;AAC3C,MAAI,CAAC;AAAY,WAAO;AACxB,SAAO,WAAW,MAAM,GAAG,EAAE,CAAC,KAAK;AACrC;AAEA,SAAS,yBAAyB,QAAQ;AACxC,QAAM,aAAa,kBAAkB,MAAM;AAC3C,MAAI,CAAC,YAAY;AACf,WAAO,oBAAoB;AAAA,EAC7B;AAEA,QAAM,gBAAgB,oBAAoB,UAAU;AACpD,MAAI,OAAO,kBAAkB,YAAY;AACvC,UAAM,WAAW,kBAAkB,cAAc,MAAM,CAAC;AACxD,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,SAAS;AACjC,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,SAAS,QAAQ,SAAS,GAAG,SAAS,GAAG;AAC3D,cAAU,QAAQ,KAAK;AACvB,QAAI,QAAQ,QAAQ,SAAS,GAAG;AAC9B,gBAAU,IAAI,KAAK;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAO,UAAU;AAC9C,SAAO,OAAO,KAAK,EAAE,QAAQ,cAAc,CAAC,QAAQ,UAAU,SAAS,OAAO,KAAK,CAAC,CAAC;AACvF;AAEA,SAAS,oBAAoB,UAAU;AACrC,MAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAa,CAAC;AACpB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,QAAI,OAAO,UAAU,UAAU;AAC7B,iBAAW,GAAG,IAAI;AAClB;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,UAAU,YAAY,OAAO,MAAM,YAAY,UAAU;AAC3E,iBAAW,GAAG,IAAI,MAAM;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;AAgDA,SAAS,iBAAiB,QAAQ;AAChC,QAAM,aAAa,kBAAkB,MAAM;AAC3C,MAAI,CAAC,YAAY;AACf,WAAO,CAAC,oBAAoB,aAAa;AAAA,EAC3C;AACA,QAAM,OAAO,eAAe,UAAU;AACtC,MAAI,CAAC,QAAQ,SAAS,YAAY;AAChC,WAAO,CAAC,UAAU;AAAA,EACpB;AACA,SAAO,CAAC,YAAY,IAAI;AAC1B;AAEA,SAAS,oBAAoB,QAAQ,UAAU;AAC7C,QAAM,mBAAmB,yBAAyB,MAAM;AACxD,sBAAoB,iBAAiB;AAAA,IACnC;AAAA,IACA,oBAAoB,QAAQ;AAAA,EAC9B;AACF;AAEA,SAAS,uBAAuB,KAAK;AACnC,MAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,wBAAoB,cAAc,IAAI,GAAG;AAAA,EAC3C;AACF;AAEA,SAAS,uBAAuB,KAAK,OAAO;AAC1C,MAAI,OAAO,QAAQ,YAAY,CAAC,IAAI,QAAQ;AAC1C;AAAA,EACF;AAEA,QAAM,kBAAkB,OAAO,UAAU,WAAW,QAAQ,OAAO,SAAS,EAAE;AAC9E,MAAI,CAAC,gBAAgB,QAAQ;AAC3B;AAAA,EACF;AAEA,MAAI,CAAC,oBAAoB,YAAY,IAAI,eAAe,GAAG;AACzD,wBAAoB,YAAY,IAAI,iBAAiB,oBAAI,IAAI,CAAC;AAAA,EAChE;AAEA,sBAAoB,YAAY,IAAI,eAAe,EAAE,IAAI,GAAG;AAC9D;AAEA,SAAS,oBAAoB,QAAQ;AACnC,QAAM,WAAW,iBAAiB,MAAM;AACxC,aAAW,aAAa,UAAU;AAChC,QAAI,oBAAoB,iBAAiB,IAAI,SAAS,GAAG;AACvD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU,oBAAoB,iBAAiB,IAAI,SAAS;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,qBAAqB,QAAQ,SAAS,YAAY;AAC/D,QAAM,eAAe,yBAAyB,MAAM;AACpD,QAAM,WAAW,oBAAoB,YAAY;AACjD,MAAI,UAAU;AACZ,WAAO,SAAS;AAAA,EAClB;AAEA,QAAM,aAAa;AACnB,MAAI,oBAAoB,gBAAgB,IAAI,UAAU,GAAG;AACvD,WAAO,oBAAoB,gBAAgB,IAAI,UAAU;AAAA,EAC3D;AAEA,MAAI,CAAC,oBAAoB,UAAU;AACjC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,SACJ,oBAAoB,SAAS,cAC7B,oBAAoB,SAAS,aAC7B;AAEF,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAAU;AAAA,IACd,QAAQ;AAAA,IACR,eAAe,oBAAoB;AAAA,IACnC;AAAA,IACA,eAAe,MAAM,KAAK,oBAAoB,iBAAiB,KAAK,CAAC;AAAA,IACrE,UAAU;AAAA,MACR,GAAI,oBAAoB,YAAY,GAAG,YAAY,CAAC;AAAA,IACtD;AAAA,IACA,MAAM,WAAW,iBAAiB,WAAW;AAAA,EAC/C;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,OAAO,OAAO;AAAA,EACzB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,UAAU,OAAO,OAAO,SAAS,YAAY;AAC/C,UAAM,UAAU,OACb,KAAK,CAAC,UAAU;AACf,YAAMK,cAAa,oBAAoB,KAAK;AAC5C,0BAAoB,cAAcA,WAAU;AAC5C,aAAOA;AAAA,IACT,CAAC,EACA,MAAM,OAAO,CAAC,EAAE,EAChB,QAAQ,MAAM;AACb,0BAAoB,gBAAgB,OAAO,UAAU;AAAA,IACvD,CAAC;AAEH,wBAAoB,gBAAgB,IAAI,YAAY,OAAO;AAC3D,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,oBAAoB,MAAM;AAC7C,sBAAoB,cAAc,UAAU;AAC5C,SAAO;AACT;AAEA,SAAS,gCAAgC,SAAS;AAChD,MAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,OAAO,YAAY;AAC7C,QAAM,KACJ,qBAAqB,mBAAmB,UACpC,UACA,SAAS,aAAa,IACpB,UACA;AAER,MAAI,CAAC,IAAI;AACP,WAAO;AAAA,EACT;AAEA,MAAI,GAAG,eAAe,MAAM,GAAG;AAC7B,WAAO,kBAAkB,GAAG,aAAa,MAAM,CAAC;AAAA,EAClD;AAEA,QAAM,SAAS,GAAG,UAAU,QAAQ;AACpC,MAAI,UAAU,OAAO,cAAc;AACjC,WAAO,kBAAkB,OAAO,aAAa,MAAM,CAAC;AAAA,EACtD;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,UAAU,CAAC,GAAG;AAC5C,MAAI,OAAO,SAAS,SAAS,YAAY,QAAQ,KAAK,KAAK,GAAG;AAC5D,WAAO,yBAAyB,QAAQ,IAAI;AAAA,EAC9C;AAEA,QAAM,eACJ,SAAS,WAAW,SAAS,SAAS,SAAS,QAAQ,SAAS,kBAAkB;AACpF,QAAM,eAAe,gCAAgC,YAAY;AACjE,MAAI,cAAc;AAChB,WAAO,yBAAyB,YAAY;AAAA,EAC9C;AAEA,MAAI,OAAO,aAAa,eAAe,SAAS,iBAAiB;AAC/D,UAAM,aAAa,kBAAkB,SAAS,gBAAgB,aAAa,MAAM,CAAC;AAClF,QAAI,YAAY;AACd,aAAO,yBAAyB,UAAU;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,oBAAoB;AAC7B;AAEA,SAAS,2BAA2B;AAClC,QAAM,WAAW,oBAAI,IAAI,CAAC,oBAAoB,aAAa,CAAC;AAE5D,MAAI,OAAO,aAAa,aAAa;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,kBAAkB,SAAS,iBAAiB,eAAe,MAAM,CAAC;AACnF,MAAI,UAAU;AACZ,aAAS,IAAI,yBAAyB,QAAQ,CAAC;AAAA,EACjD;AAEA,QAAM,QAAQ,SAAS,mBAAmB,QAAQ,KAAK,CAAC;AACxD,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,kBAAkB,KAAK,aAAa,MAAM,CAAC;AACxD,QAAI,MAAM;AACR,eAAS,IAAI,yBAAyB,IAAI,CAAC;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,8BAA8B,iBAAiB;AAC5D,aAAW,UAAU,iBAAiB;AACpC,UAAM,qBAAqB,QAAQ,eAAe;AAAA,EACpD;AACF;AAEA,SAAS,yBAAyB,iBAAiB;AACjD,aAAW,gBAAgB,MAAM,KAAK,oBAAoB,iBAAiB,KAAK,CAAC,GAAG;AAClF,QAAI,CAAC,gBAAgB,IAAI,YAAY,GAAG;AACtC,0BAAoB,iBAAiB,OAAO,YAAY;AAAA,IAC1D;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB,OAAO;AACpC,QAAM,QAAQ,OAAO,SAAS,EAAE;AAChC,QAAM,WAAW,MAAM,MAAM,MAAM,KAAK,CAAC,EAAE,GAAG,CAAC;AAC/C,QAAM,YAAY,MAAM,MAAM,MAAM,KAAK,CAAC,EAAE,GAAG,CAAC;AAChD,QAAMC,SAAQ,QAAQ;AACtB,QAAM,MAAM,MAAM,SAAS,SAAS;AACpC,QAAM,OAAO,OAAOA,SAAQ,MAAM,MAAMA,QAAO,GAAG,IAAI;AAEtD,SAAO,EAAE,SAAS,MAAM,SAAS;AACnC;AAEA,SAAS,eAAe,OAAO;AAC7B,SAAO,OAAO,SAAS,EAAE,EAAE,QAAQ,uBAAuB,MAAM;AAClE;AAEA,SAAS,4BAA4B,UAAU,MAAM;AACnD,QAAM,gBAAgB,OAAO,aAAa,WAAW,WAAW,OAAO,YAAY,EAAE;AACrF,QAAM,YAAY,OAAO,SAAS,WAAW,OAAO,OAAO,QAAQ,EAAE;AACrE,QAAM,qBAAqB;AAE3B,QAAM,UAAU,MAAM,KAAK,cAAc,SAAS,kBAAkB,CAAC;AACrE,MAAI,CAAC,QAAQ,QAAQ;AACnB,WAAO,kBAAkB,YAAY,CAAC,IAAI;AAAA,EAC5C;AAEA,QAAM,mBAAmB,CAAC;AAC1B,MAAI,UAAU;AACd,MAAI,YAAY;AAEhB,aAAW,SAAS,SAAS;AAC3B,UAAM,aAAa,MAAM,SAAS;AAClC,eAAW,eAAe,cAAc,MAAM,WAAW,UAAU,CAAC;AACpE,eAAW;AACX,qBAAiB,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;AACtC,gBAAY,aAAa,MAAM,CAAC,EAAE;AAAA,EACpC;AAEA,aAAW,eAAe,cAAc,MAAM,SAAS,CAAC;AACxD,aAAW;AAEX,QAAM,SAAS,IAAI,OAAO,OAAO,EAAE,KAAK,SAAS;AACjD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,CAAC;AAChB,WAAS,aAAa,GAAG,aAAa,OAAO,QAAQ,cAAc,GAAG;AACpE,UAAM,mBAAmB,iBAAiB,aAAa,CAAC;AACxD,UAAM,iBAAiB,OAAO,UAAU;AAExC,QACE,OAAO,UAAU,eAAe,KAAK,QAAQ,gBAAgB,KAC7D,OAAO,gBAAgB,MAAM,gBAC7B;AACA,aAAO;AAAA,IACT;AAEA,WAAO,gBAAgB,IAAI;AAAA,EAC7B;AAEA,SAAO;AACT;AAEA,SAAS,+BAA+B,KAAK,MAAM;AACjD,MAAI,OAAO,QAAQ,YAAY,CAAC,IAAI,QAAQ;AAC1C,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAY,CAAC,GAAG;AACtB,aAAW,CAAC,EAAE,QAAQ,KAAK,oBAAoB,iBAAiB,QAAQ,GAAG;AACzE,UAAM,YAAY,WAAW,GAAG;AAChC,QAAI,OAAO,cAAc,YAAY,UAAU,QAAQ;AACrD,gBAAU,KAAK,SAAS;AAAA,IAC1B;AAAA,EACF;AAEA,aAAW,YAAY,WAAW;AAChC,UAAM,YAAY,4BAA4B,UAAU,IAAI;AAC5D,QAAI,WAAW;AACb,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,0BAA0B,UAAU;AAC3C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,oBAAoB,YAAY,IAAI,QAAQ;AAChE,MAAI,eAAe,YAAY,OAAO,GAAG;AACvC,eAAW,OAAO,aAAa;AAC7B,UAAI,oBAAoB,cAAc,IAAI,GAAG,GAAG;AAC9C,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,MAAI,oBAAoB,cAAc,IAAI,QAAQ,GAAG;AACnD,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,MAAM,KAAK,oBAAoB,iBAAiB,QAAQ,CAAC;AAC/E,aAAW,OAAO,oBAAoB,eAAe;AACnD,eAAW,CAAC,EAAE,QAAQ,KAAK,eAAe;AACxC,UAAI,YAAY,SAAS,GAAG,MAAM,UAAU;AAC1C,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iCAAiC,UAAU;AAClD,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,YAAY;AAEhB,aAAW,CAAC,cAAc,WAAW,KAAK,oBAAoB,YAAY,QAAQ,GAAG;AACnF,QAAI,OAAO,iBAAiB,YAAY,CAAC,aAAa,QAAQ;AAC5D;AAAA,IACF;AAEA,QAAI,iBAAiB,UAAU;AAC7B;AAAA,IACF;AAEA,UAAMA,SAAQ,SAAS,QAAQ,YAAY;AAC3C,QAAIA,WAAU,IAAI;AAChB;AAAA,IACF;AAEA,eAAW,OAAO,aAAa;AAC7B,UAAI,CAAC,oBAAoB,cAAc,IAAI,GAAG,GAAG;AAC/C;AAAA,MACF;AAEA,YAAM,SAAS,+BAA+B,KAAK,YAAY;AAC/D,YAAM,YAAY;AAAA,QAChB;AAAA,QACA,aAAa;AAAA,QACb,OAAAA;AAAA,QACA,KAAKA,SAAQ,aAAa;AAAA,QAC1B;AAAA,MACF;AAEA,UAAI,CAAC,aAAa,UAAU,YAAY,SAAS,UAAU,YAAY,QAAQ;AAC7E,oBAAY;AAAA,MACd;AAEA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,mBAAmB,UAAU;AAC1C,MAAI,CAAC,YAAY,SAAS,aAAa,GAAG;AACxC;AAAA,EACF;AAEA,QAAM,gBAAgB,SAAS,iBAAiB;AAChD,MAAI,CAAC,eAAe;AAClB;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,MAAM,SAAS,IAAI,sBAAsB,SAAS,SAAS;AAC5E,MAAI,CAAC,MAAM;AACT;AAAA,EACF;AAEA,MAAI,MAAM,oBAAoB,eAAe,IAAI,QAAQ,KAAK;AAC9D,MAAI,CAAC,OAAO,CAAC,oBAAoB,cAAc,IAAI,GAAG,GAAG;AACvD,UAAM,0BAA0B,IAAI;AAAA,EACtC;AAEA,MAAI,CAAC,KAAK;AACR,UAAM,eAAe,iCAAiC,IAAI;AAC1D,QAAI,CAAC,cAAc;AACjB;AAAA,IACF;AAEA,UAAMC,gBAAe,uBAAuB,EAAE,SAAS,cAAc,CAAC;AACtE,UAAM,qBAAqBA,eAAc,WAAW;AAEpD,UAAMC,cAAa;AAAA,MACjB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,EAAE,SAAS,cAAc;AAAA,MACzB;AAAA,IACF;AACA,UAAMC,kBAAiB,aAAa,OAAO,SACvC,sBAAsBD,aAAY,CAAC,UAAU,aAAa,OAAO,KAAK,CAAC,IACvEA;AACJ,UAAM,gBACJ,KAAK,MAAM,GAAG,aAAa,KAAK,IAChCC,kBACA,KAAK,MAAM,aAAa,GAAG;AAC7B,UAAM,gBAAgB,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ;AAE3D,QAAI,kBAAkB,SAAS,WAAW;AACxC,eAAS,YAAY;AAAA,IACvB;AACA;AAAA,EACF;AAEA,sBAAoB,eAAe,IAAI,UAAU,GAAG;AAEpD,QAAM,eAAe,uBAAuB,EAAE,SAAS,cAAc,CAAC;AACtE,QAAM,qBAAqB,cAAc,WAAW;AAEpD,QAAM,SAAS,+BAA+B,KAAK,IAAI;AACvD,QAAM,aAAa,qBAAqB,KAAK,QAAQ,EAAE,SAAS,cAAc,GAAG,IAAI;AACrF,QAAM,iBAAiB,OAAO,SAC1B,sBAAsB,YAAY,CAAC,UAAU,OAAO,KAAK,CAAC,IAC1D;AACJ,QAAM,WAAW,GAAG,OAAO,GAAG,cAAc,GAAG,QAAQ;AAEvD,MAAI,aAAa,SAAS,WAAW;AACnC,aAAS,YAAY;AAAA,EACvB;AACF;AAEA,eAAe,+BAA+B;AAC5C,MAAI,OAAO,aAAa,eAAe,oBAAoB,cAAc,SAAS,GAAG;AACnF;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,QAAQ,SAAS;AACvC,MAAI,CAAC,QAAQ,OAAO,SAAS,qBAAqB,YAAY;AAC5D;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC;AACf,QAAM,YAAY,oBAAI,IAAI;AAE1B,QAAM,UAAU,CAAC,kBAAkB;AACjC,QAAI,CAAC,iBAAiB,UAAU,IAAI,aAAa,GAAG;AAClD;AAAA,IACF;AAEA,cAAU,IAAI,aAAa;AAC3B,UAAM,KAAK,aAAa;AAAA,EAC1B;AAEA,UAAQ,IAAI;AAEZ,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,cAAc,MAAM,KAAK;AAC/B,QAAI,CAAC,eAAe,OAAO,YAAY,qBAAqB,YAAY;AACtE;AAAA,IACF;AAEA,UAAM,WAAW,YAAY,iBAAiB,GAAG;AACjD,eAAW,WAAW,UAAU;AAC9B,YAAM,aAAa,SAAS;AAC5B,UAAI,YAAY;AACd,gBAAQ,UAAU;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC;AAEf,aAAW,YAAY,OAAO;AAC5B,UAAM,SAAS,SAAS,iBAAiB,UAAU,WAAW,SAAS;AACvE,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,KAAK,OAAO,WAAW;AAAA,IAC/B;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,mBAAmB,IAAI;AAAA,EAC/B;AACF;AAEA,SAAS,4BAA4B,SAAS;AAC5C,MAAI,MAAM,oBAAoB,gBAAgB,IAAI,OAAO;AACzD,MAAI,CAAC,KAAK;AACR,UAAM,oBAAI,IAAI;AACd,wBAAoB,gBAAgB,IAAI,SAAS,GAAG;AAAA,EACtD;AACA,SAAO;AACT;AAEA,eAAe,oBAAoB,SAAS,UAAU;AACpD,MAAI,CAAC,WAAW,OAAO,QAAQ,iBAAiB,YAAY;AAC1D;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,aAAa,QAAQ;AAC9C,MAAI,OAAO,aAAa,YAAY,CAAC,SAAS,QAAQ;AACpD;AAAA,EACF;AAEA,QAAM,SAAS,4BAA4B,OAAO;AAClD,MAAI,MAAM,OAAO,IAAI,QAAQ,KAAK;AAElC,MAAI,CAAC,OAAO,CAAC,oBAAoB,cAAc,IAAI,GAAG,GAAG;AACvD,UAAM,0BAA0B,QAAQ;AAAA,EAC1C;AAEA,MAAI,CAAC,KAAK;AACR,UAAM,eAAe,iCAAiC,QAAQ;AAC9D,QAAI,CAAC,cAAc;AACjB;AAAA,IACF;AAEA,UAAMF,gBAAe,uBAAuB,EAAE,QAAQ,CAAC;AACvD,UAAM,qBAAqBA,eAAc,WAAW;AAEpD,UAAMC,cAAa,qBAAqB,aAAa,KAAK,aAAa,QAAQ,EAAE,QAAQ,GAAG,IAAI;AAChG,UAAMC,kBAAiB,aAAa,OAAO,SACvC,sBAAsBD,aAAY,CAAC,UAAU,aAAa,OAAO,KAAK,CAAC,IACvEA;AAEJ,UAAM,iBACJ,SAAS,MAAM,GAAG,aAAa,KAAK,IACpCC,kBACA,SAAS,MAAM,aAAa,GAAG;AAEjC,QAAI,mBAAmB,UAAU;AAC/B,cAAQ,aAAa,UAAU,cAAc;AAAA,IAC/C;AAEA,WAAO,IAAI,UAAU,aAAa,GAAG;AACrC;AAAA,EACF;AAEA,SAAO,IAAI,UAAU,GAAG;AAExB,QAAM,eAAe,uBAAuB,EAAE,QAAQ,CAAC;AACvD,QAAM,qBAAqB,cAAc,WAAW;AAEpD,QAAM,SAAS,+BAA+B,KAAK,QAAQ;AAC3D,QAAM,aAAa,qBAAqB,KAAK,QAAQ,EAAE,QAAQ,GAAG,IAAI;AACtE,QAAM,iBAAiB,OAAO,SAC1B,sBAAsB,YAAY,CAAC,UAAU,OAAO,KAAK,CAAC,IAC1D;AAEJ,MAAI,mBAAmB,UAAU;AAC/B,YAAQ,aAAa,UAAU,cAAc;AAAA,EAC/C;AACF;AAEA,eAAe,gCAAgC;AAC7C,MAAI,OAAO,aAAa,eAAe,oBAAoB,cAAc,SAAS,GAAG;AACnF;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,QAAQ,SAAS;AACvC,MAAI,CAAC,MAAM;AACT;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC;AACf,QAAM,YAAY,oBAAI,IAAI;AAE1B,QAAM,UAAU,CAAC,kBAAkB;AACjC,QAAI,CAAC,iBAAiB,UAAU,IAAI,aAAa,GAAG;AAClD;AAAA,IACF;AAEA,cAAU,IAAI,aAAa;AAC3B,UAAM,KAAK,aAAa;AAAA,EAC1B;AAEA,UAAQ,IAAI;AAEZ,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,cAAc,MAAM,KAAK;AAC/B,QAAI,CAAC,eAAe,OAAO,YAAY,qBAAqB,YAAY;AACtE;AAAA,IACF;AAEA,UAAM,WAAW,YAAY,iBAAiB,GAAG;AACjD,eAAW,WAAW,UAAU;AAC9B,YAAM,aAAa,SAAS;AAC5B,UAAI,YAAY;AACd,gBAAQ,UAAU;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,aAAW,YAAY,OAAO;AAC5B,QAAI,CAAC,YAAY,OAAO,SAAS,qBAAqB,YAAY;AAChE;AAAA,IACF;AAEA,UAAM,WAAW,SAAS,iBAAiB,GAAG;AAC9C,eAAW,WAAW,UAAU;AAC9B,iBAAW,YAAY,0BAA0B;AAC/C,YAAI,QAAQ,aAAa,QAAQ,GAAG;AAClC,gBAAM,oBAAoB,SAAS,QAAQ;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,0BAA0B;AACvC,QAAM,kBAAkB,yBAAyB;AACjD,QAAM,8BAA8B,eAAe;AACnD,QAAM,6BAA6B;AACnC,QAAM,8BAA8B;AACpC,2BAAyB,eAAe;AAC1C;AAEA,SAAS,sBAAsB;AAC7B,MAAI,OAAO,WAAW,aAAa;AACjC;AAAA,EACF;AAEA,MAAI,oBAAoB,gBAAgB;AACtC,iBAAa,oBAAoB,cAAc;AAAA,EACjD;AAEA,sBAAoB,iBAAiB,WAAW,MAAM;AACpD,wBAAoB,iBAAiB;AACrC,4BAAwB;AAAA,EAC1B,GAAG,EAAE;AACP;AA+BA,SAAS,qBAAqB,KAAK,SAAS,CAAC,GAAG,UAAU,CAAC,GAAG,WAAW,MAAM;AAC7E,QAAM,kBAAkB,uBAAuB,OAAO;AACtD,QAAM,mBAAmB,oBAAoB,eAAe;AAE5D,MAAI,CAAC,kBAAkB;AACrB,yBAAqB,iBAAiB,KAAK;AAAA,EAC7C;AAEA,QAAM,iBAAiB,oBAAoB,eAAe,GAAG,YAAY,CAAC;AAC1E,QAAM,kBACJ,oBAAoB,oBAAoB,aAAa,GAAG,YAAY,CAAC;AAEvE,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,eAAe,oBAAoB;AAAA,IACnC,UAAU;AAAA,IACV,kBAAkB,OAAO;AAAA,MACvB,MAAM,KAAK,oBAAoB,iBAAiB,QAAQ,CAAC;AAAA,IAC3D;AAAA,IACA;AAAA,EACF;AAEA,MAAI;AACJ,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAM,kBAAkB,oBAAoB,oBAAoB;AAChE,MAAI,OAAO,oBAAoB,UAAU,cAAc,YAAY;AACjE,iBAAa,oBAAoB,SAAS,UAAU,OAAO;AAAA,EAC7D;AAEA,MAAI,eAAe;AAEnB,MAAI,eAAe,UAAa,eAAe,MAAM;AACnD,iBAAa,eAAe,GAAG;AAAA,EACjC;AAEA,MAAI,eAAe,UAAa,eAAe,MAAM;AACnD,iBAAa,gBAAgB,GAAG;AAChC,mBAAe,eAAe,UAAa,eAAe,OAAO,OAAO;AAAA,EAC1E;AAEA,MAAI,eAAe,UAAa,eAAe,MAAM;AACnD,iBAAa;AACb,mBAAe;AAAA,EACjB;AAEA,MAAI,gBAAgB,CAAC,mBAAmB,cAAc;AACpD,UAAM,aAAa,GAAG,eAAe,KAAK,GAAG;AAC7C,QAAI,CAAC,oBAAoB,gBAAgB,IAAI,UAAU,GAAG;AACxD,0BAAoB,gBAAgB,IAAI,UAAU;AAClD;AAAA,QACE;AAAA,QACA,0CAA0C,eAAe,cAAc,GAAG,YAAY,YAAY;AAAA,MACpG;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,OAAO,eAAe,WAAW,aAAa,OAAO,UAAU;AAChF,yBAAuB,KAAK,QAAQ;AAEpC,MAAI,MAAM,QAAQ,MAAM,KAAK,OAAO,SAAS,GAAG;AAC9C,UAAM,eAAe,sBAAsB,UAAU,CAAC,UAAU,OAAO,KAAK,CAAC;AAC7E,QAAI,iBAAiB,UAAU;AAC7B,6BAAuB,KAAK,YAAY;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AACT;AAkFO,IAAM,uBAAuB,CAAC,SAAS,QAAQ,UAAU,CAAC,MAAM;AACrE,QAAM,aAAa,iBAAiB,OAAO;AAC3C,yBAAuB,UAAU;AACjC,QAAM,aAAa,qBAAqB,YAAY,QAAQ,SAAS;AAAA,IACnE;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,sBAAsB,YAAY,CAAC,UAAU,OAAO,KAAK,CAAC;AACnE;AASO,IAAM,MAAM,CAAC,UAAU,UAAU,CAAC,MAAM;AAC7C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,cAAc,QAAQ,GAAG;AAC3B,WAAO,qBAAqB,SAAS,SAAS,SAAS,QAAQ,OAAO;AAAA,EACxE;AAEA,QAAM,MAAM,OAAO,QAAQ;AAC3B,yBAAuB,GAAG;AAC1B,QAAM,aAAa,qBAAqB,KAAK,CAAC,GAAG,SAAS,IAAI;AAE9D,MACE,CAAC,SAAS,WACV,CAAC,SAAS,SACV,CAAC,SAAS,QACV,CAAC,SAAS,kBACV,CAAC,SAAS,MACV;AACA,wBAAoB;AAAA,EACtB;AAEA,SAAO;AACT;;;ACx+BO,IAAM,UAAN,cAAsB,YAAY;AAAA,EACvC,cAAc;AACZ,UAAM;AAEN,SAAK,OAAO;AAEZ,SAAK,WAAW;AAEhB,SAAK,MAAM,MAAM;AAAA,IAAC;AAElB,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,IAAM,oBAAoB;AAEjC,IAAM,cAAc,OAAO,eAAe,cAAc,aAAa;AACrE,IAAM,cAAc,cAAc,iBAAiB;AAE5C,IAAMC,OACX,eAAe,OAAO,YAAY,qBAAqB,aACnD,cACA,IAAI,QAAQ;AAElB,IAAI,aAAa;AACf,cAAY,iBAAiB,IAAIA;AACnC;AAEA,IAAI,OAAOA,KAAI,QAAQ,YAAY;AACjC,EAAAA,KAAI,MAAM,CAAC,QAAQ,OAAO,YAAY,SAAS;AAC7C,QAAI,OAAO,YAAY;AAAa;AACpC,UAAM,SACJ,OAAO,QAAQ,KAAK,MAAM,aACtB,QAAQ,KAAK,EAAE,KAAK,OAAO,IAC3B,OAAO,QAAQ,QAAQ,aACrB,QAAQ,IAAI,KAAK,OAAO,IACxB;AACR,QAAI,CAAC;AAAQ;AACb,QAAI,KAAK,SAAS,GAAG;AACnB,aAAO,SAAS,GAAG,IAAI;AAAA,IACzB,OAAO;AACL,aAAO,OAAO;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAI,OAAOA,KAAI,eAAe,YAAY;AACxC,EAAAA,KAAI,aAAa;AACnB;;;ACzCA,IAAM,cAAN,MAAkB;AAAA,EAChB,cAAc;AACZ,SAAK,QAAQ;AACb,SAAK,eAAe;AAAA,MAClB,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,QAAQ,CAAC,GAAG;AACxB,SAAK,QAAQ;AACb,SAAK,eAAe,EAAE,GAAG,KAAK,cAAc,GAAG,MAAM;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,OAAO;AACzB,QAAI,KAAK,UAAU,QAAQ;AAGzB,aAAO;AAAA,IACT,OAAO;AAEL,UAAI;AACF,cAAM,SAAS,MAAM;AAAA;AAAA,UAA0B,KAAK,aAAa,KAAK;AAAA;AACtE,eAAO,OAAO,KAAK;AAAA,MACrB,SAAS,OAAO;AAEd,QAAAC,KAAI,IAAI,SAAS,mCAAmC,KAAK,KAAK,KAAK;AACnE,QAAAA,KAAI,IAAI,SAAS,yBAAyB,KAAK,aAAa,KAAK,CAAC,EAAE;AACpE,QAAAA,KAAI,IAAI,SAAS,iHAAiH;AAElI,cAAM,WAAW,IAAI,cAAc;AACnC,iBAAS,YAAY,uBAAuB,QAAQ,KAAK;AACzD,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAS;AACX,WAAO,KAAK,UAAU;AAAA,EACxB;AACF;AAGO,IAAM,WAAW,IAAI,YAAY;;;ACjEjC,SAAS,qBAAqB,SAAS;AAC5C,MAAI;AACF,QAAI,OAAO,aAAa;AAAa;AAGrC,QACE,OAAO,kBAAkB,eACzB,wBAAwB,SAAS,WACjC;AACA,YAAM,QAAQ,IAAI,cAAc;AAEhC,YAAM,YAAY,OAAO;AAGzB,YAAM,OAAO;AAEb,YAAM,UAAU,SAAS,sBAAsB,CAAC,GAAG;AAAA,QACjD,CAAC,MAAM,EAAE,SAAS;AAAA,MACpB;AACA,eAAS,qBAAqB,CAAC,GAAG,QAAQ,KAAK;AAC/C;AAAA,IACF;AAGA,UAAM,UAAU;AAChB,QAAI,KAAK,SAAS,eAAe,OAAO;AACxC,QAAI,CAAC,IAAI;AACP,WAAK,SAAS,cAAc,OAAO;AACnC,SAAG,KAAK;AACR,SAAG,OAAO;AACV,YAAM,OAAO,SAAS,QAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC;AACrE,UAAI;AAAM,aAAK,YAAY,EAAE;AAAA;AACxB,iBAAS,gBAAgB,YAAY,EAAE;AAAA,IAC9C;AAGA,OAAG,cAAc;AAAA,EACnB,SAAS,KAAK;AACZ,IAAAC,KAAI,IAAI,QAAQ,gCAAgC,GAAG;AAAA,EACrD;AACF;AAMO,SAAS,YAAY,WAAW;AACrC,QAAM,SAAS;AAEf,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,IAAAA,KAAI;AAAA,MACF;AAAA,MACA;AAAA,IACF;AACA;AAAA,EACF;AAIA,QAAM,UAAU,OAAO,cAAc,OAAO,OAAO;AACnD,MAAI,CAAC,SAAS;AACZ,WAAO,SAAS;AAAA,MACd;AAAA,MACA;AAAA,IACF;AACA;AAAA,EACF;AAGA,uBAAqB,OAAO;AAC9B;AAcA,eAAsB,gBACpB,YACA,mBAAmB,CAAC,GACpB,YAAY,MACZ;AACA,MAAI;AAEF,UAAM,aAAa,WAAW,uBAC1B,UAAU,uBACV,MAAM,SAAY,cAAc,YAAY;AAGhD,eAAW,qBAAqB,CAAC,YAAY,GAAG,gBAAgB;AAAA,EAClE,SAAS,OAAO;AACd,UAAM,gBAAgB,WAAW,MAAM,SAAS,YAAY,KAAK;AACjE,IAAAA,KAAI;AAAA,MACF;AAAA,MACA,aAAa,aAAa;AAAA,MAC1B;AAAA,IACF;AAEA,eAAW,qBAAqB;AAAA,EAClC;AACF;AAWA,eAAsB,YACpB,YACA,SAAS,CAAC,YAAY,GACtB,mBAAmB,CAAC,GACpB,YAAY,MACZ;AACA,QAAM,uBAAuB,MAAM,QAAQ,gBAAgB,IACvD,iBAAiB,OAAO,OAAO,IAC/B,CAAC;AAIL,MAAI,qBAAqB,QAAQ;AAC/B,UAAM,WAAW,MAAM,QAAQ,WAAW,kBAAkB,IACxD,WAAW,qBACX,CAAC;AACL,UAAM,gBAAgB,SAAS;AAAA,MAC7B,CAAC,UAAU,CAAC,qBAAqB,SAAS,KAAK;AAAA,IACjD;AACA,eAAW,qBAAqB,CAAC,GAAG,eAAe,GAAG,oBAAoB;AAAA,EAC5E;AAEA,MAAI;AAEF,UAAM,cAAc,MAAM,QAAQ;AAAA,MAChC,OAAO,IAAI,OAAO,UAAU;AAC1B,YAAI,WAAW;AACb,kBAAQ,OAAO;AAAA,YACb,KAAK;AACH,qBAAO,UAAU;AAAA,YACnB,KAAK;AACH,qBAAO,UAAU;AAAA,YACnB,KAAK;AACH,qBAAO,UAAU;AAAA,YACnB,KAAK;AACH,qBAAO,UAAU;AAAA,YACnB;AACE;AAAA,UACJ;AAAA,QACF;AACA,eAAO,SAAY,cAAc,KAAK;AAAA,MACxC,CAAC;AAAA,IACH;AAGA,UAAM,mBAAmB,YAAY,OAAO,CAAC,UAAU,UAAU,IAAI;AAGrE,eAAW,qBAAqB,CAAC,GAAG,kBAAkB,GAAG,oBAAoB;AAAA,EAC/E,SAAS,OAAO;AACd,UAAM,gBAAgB,WAAW,MAAM,SAAS,YAAY,KAAK;AACjE,IAAAA,KAAI;AAAA,MACF;AAAA,MACA,aAAa,aAAa;AAAA,MAC1B;AAAA,IACF;AAEA,eAAW,qBAAqB;AAAA,EAClC;AACF;AASO,SAAS,iBAAiB,KAAK;AACpC,QAAM,QAAQ,IAAI,cAAc;AAChC,QAAM,YAAY,GAAG;AACrB,SAAO;AACT;;;AC5LA,IAAM,sBAAsB;AAAA,EAC1B,EAAE,UAAU,aAAa;AAAA,EACzB,EAAE,UAAU,qBAAqB;AAAA,EACjC,EAAE,UAAU,qBAAqB;AAAA,EACjC,EAAE,UAAU,oBAAoB;AAAA,EAChC,EAAE,UAAU,sBAAsB;AAAA,EAClC,EAAE,UAAU,sBAAsB;AAAA,EAClC,EAAE,UAAU,kCAAkC;AAAA,EAC9C,EAAE,UAAU,cAAc;AAAA,EAC1B,EAAE,UAAU,2BAA2B;AACzC;AAMA,SAAS,iBAAiB,MAAM;AAC9B,MAAI,KAAK,QAAQ;AAAmB;AACpC,OAAK,QAAQ,oBAAoB;AAEjC,OAAK;AAAA,IACH;AAAA,IACA,CAAC,UAAU;AAGT,UAAI,MAAM,OAAO,QAAQ,MAAM,OAAO,kBAAkB,MAAM;AAC5D,aAAK,iBAAiB,wBAAwB,EAAE,QAAQ,CAAC,YAAY;AACnE,cAAI,YAAY,MAAM,QAAQ;AAC5B,oBAAQ,OAAO;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,MAAM;AAC7B,MAAI,KAAK,QAAQ;AAAkB;AACnC,OAAK,QAAQ,mBAAmB;AAChC,QAAM,OAAO,KAAK;AAElB,MAAI,CAAC;AAAM;AAEX,QAAM,UACJ,KAAK,cAAc,wBAAwB,KAC3C,KAAK,cAAc,QAAQ;AAE7B,QAAM,kBACJ,OAAO,gBAAgB,eACvB,iBAAiB,YAAY,aAC7B,iBAAiB,YAAY;AAE/B,MAAI,WAAW,CAAC,QAAQ,aAAa,MAAM,GAAG;AAC5C,YAAQ,aAAa,QAAQ,QAAQ;AAAA,EACvC;AAEA,MAAI,CAAC,KAAK,IAAI;AACZ,SAAK,KAAK,YAAY,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,EAC9D;AAEA,QAAM,SAAS,KAAK,SAAS,YAAY,MAAM;AAC/C,QAAM,mBAAmB;AACzB,MAAI,UAAU,CAAC,KAAK,aAAa,MAAM,GAAG;AACxC,SAAK,aAAa,QAAQ,MAAM;AAAA,EAClC;AACA,MAAI,CAAC,KAAK,aAAa,aAAa,GAAG;AACrC,SAAK,aAAa,eAAe,MAAM;AAAA,EACzC;AAEA,MAAI,SAAS;AACX,YAAQ,aAAa,iBAAiB,MAAM;AAC5C,YAAQ,aAAa,iBAAiB,KAAK,EAAE;AAC7C,YAAQ,aAAa,iBAAiB,OAAO;AAAA,EAC/C;AAEA,MAAI,CAAC,iBAAiB;AACpB,UAAM,UAAU;AAChB,QAAI,CAAC,WAAW,OAAO,GAAG;AACxB,iBAAW,OAAO,IAAI;AACtB,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AAEA,OAAK,aAAa,WAAW,MAAM;AAEnC,QAAM,kBAAkB,MAAM;AAC5B,UAAM,gBAAgB,KAAK,aAAa,OAAO;AAC/C,SAAK,MAAM,aAAa;AACxB,SAAK,MAAM,UAAU;AACrB,SAAK,MAAM,gBAAgB;AAE3B,UAAM,OAAO,KAAK,sBAAsB;AACxC,UAAM,QAAQ,KAAK,IAAI,KAAK,eAAe,GAAG,KAAK,eAAe,GAAG,KAAK,SAAS,GAAG,CAAC;AACvF,UAAM,SAAS,KAAK;AAAA,MAClB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,UAAU;AAAA,MACf;AAAA,IACF;AAEA,QAAI,kBAAkB,MAAM;AAC1B,WAAK,gBAAgB,OAAO;AAAA,IAC9B,OAAO;AACL,WAAK,aAAa,SAAS,aAAa;AAAA,IAC1C;AAEA,WAAO,EAAE,OAAO,OAAO;AAAA,EACzB;AAEA,QAAM,gBAAgB,MAAM;AAC1B,QAAI;AACF,aAAO,KAAK,QAAQ,eAAe;AAAA,IACrC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM;AAC5B,SAAK,aAAa,eAAe,MAAM;AACvC,aAAS,aAAa,iBAAiB,OAAO;AAAA,EAChD;AAEA,QAAM,gBAAgB,MAAM;AAC1B,SAAK,aAAa,eAAe,OAAO;AACxC,aAAS,aAAa,iBAAiB,MAAM;AAAA,EAC/C;AAEA,QAAM,mBAAmB,MAAM;AAC7B,UAAM,QACJ,KAAK,aAAa,gBAAgB,KAClC,KAAK,aAAa,yBAAyB,KAC3C,KAAK,aAAa,WAAW,KAC7B,QACA,YAAY;AACd,QAAI,SAAS,QAAQ,SAAS;AAAQ,aAAO;AAC7C,UAAM,cAAc,WAAW,MAAM,sBAAsB;AAC3D,UAAM,EAAE,QAAQ,WAAW,IAAI,gBAAgB;AAC/C,UAAM,aAAa,KAAK,IAAI,GAAG,OAAO,cAAc,WAAW,MAAM;AACrE,UAAM,aAAa,KAAK,IAAI,GAAG,WAAW,GAAG;AAC7C,UAAM,WAAW,cAAc;AAC/B,UAAM,SAAS,cAAc;AAC7B,QAAI,YAAY,CAAC;AAAQ,aAAO;AAChC,QAAI,UAAU,CAAC;AAAU,aAAO;AAChC,QAAI,YAAY;AAAQ,aAAO;AAC/B,WAAO,aAAa,aAAa,OAAO;AAAA,EAC1C;AAEA,QAAM,eAAe,MAAM;AACzB,UAAM,SACJ,KAAK,aAAa,YAAY,KAC9B,KAAK,aAAa,qBAAqB,KACvC,QACA,YAAY;AACd,QACE,UAAU,UACV,UAAU,WACV,UAAU,WACV,UAAU,OACV;AACA,aAAO,UAAU,UAAU,SAAS,UAAU,QAAQ,UAAU;AAAA,IAClE;AACA,UAAM,cAAc,WAAW,MAAM,sBAAsB;AAC3D,UAAM,EAAE,OAAO,UAAU,IAAI,gBAAgB;AAC7C,UAAM,sBAAsB,KAAK,IAAI,GAAG,OAAO,aAAa,WAAW,IAAI;AAC3E,UAAM,uBAAuB,KAAK,IAAI,GAAG,WAAW,KAAK;AACzD,UAAM,WAAW,uBAAuB;AACxC,UAAM,YAAY,wBAAwB;AAE1C,QAAI,YAAY,CAAC;AAAW,aAAO;AACnC,QAAI,aAAa,CAAC;AAAU,aAAO;AACnC,QAAI,YAAY;AAAW,aAAO;AAClC,WAAO,uBAAuB,sBAAsB,UAAU;AAAA,EAChE;AAEA,QAAM,kBAAkB,CAAC,WAAW,WAAW,MAAM;AACnD,UAAM,MAAM,iBAAiB,IAAI,EAAE,iBAAiB,SAAS,EAAE,KAAK;AACpE,QAAI,CAAC;AAAK,aAAO;AACjB,UAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,UAAM,MAAM,WAAW;AACvB,UAAM,MAAM,aAAa;AACzB,UAAM,MAAM,gBAAgB;AAC5B,UAAM,MAAM,SAAS;AACrB,aAAS,KAAK,YAAY,KAAK;AAC/B,UAAM,SAAS,OAAO,WAAW,iBAAiB,KAAK,EAAE,MAAM;AAC/D,UAAM,OAAO;AACb,WAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA,EAC5C;AAEA,QAAM,4BAA4B,MAAM;AACtC;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,QAAQ,CAAC,SAAS,KAAK,MAAM,eAAe,IAAI,CAAC;AAAA,EACrD;AAEA,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC,cAAc;AAAG;AAEtB,UAAM,cAAc,WAAW,MAAM,sBAAsB;AAC3D,UAAM,WAAW,OAAO;AACxB,UAAM,gBACJ,UAAU,SAAS,SAAS,iBAAiB,eAAe,OAAO;AACrE,UAAM,iBACJ,UAAU,UAAU,SAAS,iBAAiB,gBAAgB,OAAO;AACvE,UAAM,qBAAqB,UAAU,cAAc;AACnD,UAAM,oBAAoB,UAAU,aAAa;AACjD,UAAM,eAAe,KAAK,IAAI,GAAG,gBAAgB,mBAAmB,CAAC;AACrE,UAAM,gBAAgB,KAAK,IAAI,GAAG,iBAAiB,mBAAmB,CAAC;AAEvE,SAAK,MAAM,WAAW,GAAG,KAAK,MAAM,YAAY,CAAC;AACjD,SAAK,MAAM,gBAAgB,GAAG,KAAK,MAAM,YAAY,CAAC;AACtD,SAAK,MAAM,YAAY,GAAG,KAAK,MAAM,aAAa,CAAC;AACnD,SAAK,MAAM,WAAW;AAEtB,UAAM,EAAE,OAAO,WAAW,QAAQ,WAAW,IAAI,gBAAgB;AACjE,UAAM,UAAU,gBAAgB,eAAe,CAAC;AAChD,UAAM,YAAY,iBAAiB;AACnC,UAAM,QAAQ,aAAa;AAE3B,SAAK,QAAQ,oBAAoB;AACjC,SAAK,QAAQ,gBAAgB;AAE7B,QAAI,OAAO,UAAU,UAAU,WAAW,QAAQ,YAAY,WAAW;AACzE,QAAI,aAAa,eAAe,GAAG;AACjC,aAAO,qBAAqB;AAAA,IAC9B,OAAO;AACL,aAAO,KAAK;AAAA,QACV,qBAAqB;AAAA,QACrB,KAAK;AAAA,UACH;AAAA,UACA,qBAAqB,gBAAgB,YAAY;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,MACF,cAAc,OACV,WAAW,MAAM,UAAU,aAC3B,WAAW,SAAS;AAC1B,UAAM,KAAK;AAAA,MACT,oBAAoB;AAAA,MACpB,KAAK;AAAA,QACH;AAAA,QACA,oBAAoB,iBAAiB,aAAa;AAAA,MACpD;AAAA,IACF;AAEA,WAAO,OAAO,KAAK,OAAO;AAAA,MACxB,UAAU;AAAA,MACV,MAAM,GAAG,KAAK,MAAM,IAAI,CAAC;AAAA,MACzB,KAAK,GAAG,KAAK,MAAM,GAAG,CAAC;AAAA,MACvB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,MAAI,oBAAoB;AACxB,QAAM,iBAAiB,MAAM;AAC3B,QAAI;AAAmB;AACvB,wBAAoB,MAAM,oBAAoB;AAC9C,WAAO,iBAAiB,UAAU,iBAAiB;AACnD,WAAO,iBAAiB,UAAU,mBAAmB,IAAI;AAAA,EAC3D;AAEA,QAAM,mBAAmB,MAAM;AAC7B,QAAI,CAAC;AAAmB;AACxB,WAAO,oBAAoB,UAAU,iBAAiB;AACtD,WAAO,oBAAoB,UAAU,mBAAmB,IAAI;AAC5D,wBAAoB;AAAA,EACtB;AAEA,MAAI,uBAAuB;AAC3B,MAAI,wBAAwB;AAC5B,QAAM,oBAAoB,MAAM;AAC9B,QAAI,wBAAwB,OAAO,aAAa;AAAa;AAC7D,2BAAuB,MAAM;AAC3B,UAAI,CAAC,cAAc;AAAG;AACtB,WAAK,QAAQ,oBAAoB,iBAAiB;AAClD,WAAK,QAAQ,gBAAgB,aAAa;AAE1C,UAAI,0BAA0B,MAAM;AAClC,6BAAqB,qBAAqB;AAAA,MAC5C;AACA,8BAAwB,sBAAsB,MAAM;AAClD,gCAAwB;AACxB,YAAI,CAAC,cAAc;AAAG;AACtB,4BAAoB;AAAA,MACtB,CAAC;AAAA,IACH;AACA,aAAS,iBAAiB,sBAAsB,oBAAoB;AAAA,EACtE;AAEA,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC,wBAAwB,OAAO,aAAa;AAAa;AAC9D,aAAS,oBAAoB,sBAAsB,oBAAoB;AACvE,2BAAuB;AACvB,QAAI,0BAA0B,MAAM;AAClC,2BAAqB,qBAAqB;AAC1C,8BAAwB;AAAA,IAC1B;AAAA,EACF;AAEA,OAAK,iBAAiB,UAAU,CAAC,UAAU;AACzC,UAAM,SAAS,MAAM,aAAa;AAElC,QAAI,QAAQ;AACV,oBAAc;AACd,0BAAoB;AACpB,qBAAe;AACf,wBAAkB;AAClB;AAAA,IACF;AAEA,oBAAgB;AAChB,qBAAiB;AACjB,wBAAoB;AACpB,8BAA0B;AAAA,EAC5B,CAAC;AAED,QAAM,WAAW,MAAM;AACrB,QAAI,cAAc;AAAG;AACrB,SAAK,QAAQ,oBAAoB,iBAAiB;AAClD,SAAK,QAAQ,gBAAgB,aAAa;AAC1C,SAAK,YAAY;AACjB,0BAAsB,MAAM,oBAAoB,CAAC;AAAA,EACnD;AAEA,QAAM,YAAY,MAAM;AACtB,QAAI,CAAC,cAAc;AAAG;AACtB,SAAK,YAAY;AAAA,EACnB;AAEA,QAAM,aAAa,MAAM;AACvB,QAAI,cAAc,GAAG;AACnB,gBAAU;AAAA,IACZ,OAAO;AACL,eAAS;AAAA,IACX;AAAA,EACF;AAEA,kBAAgB;AAEhB,OAAK,iBAAiB,SAAS,CAAC,UAAU;AACxC,UAAM,SACJ,MAAM,kBAAkB,UAAU,MAAM,SAAS,MAAM,QAAQ;AACjE,QAAI,CAAC;AAAQ;AACb,QAAI,CAAC,OAAO,QAAQ,uBAAuB;AAAG;AAC9C,cAAU;AAAA,EACZ,CAAC;AAED,WAAS,iBAAiB,SAAS,CAAC,UAAU;AAC5C,UAAM,eAAe;AACrB,UAAM,gBAAgB;AACtB,eAAW;AAAA,EACb,CAAC;AAED,OAAK,iBAAiB,WAAW,CAAC,UAAU;AAC1C,QAAI,MAAM,QAAQ,UAAU;AAC1B,gBAAU;AACV,eAAS,MAAM;AAAA,IACjB;AAAA,EACF,CAAC;AACH;AAEA,SAAS,cAAc,MAAM;AAC3B,MAAI,KAAK,QAAQ;AAAgB;AACjC,OAAK,QAAQ,iBAAiB;AAC9B,QAAM,WAAW,KAAK,cAAc,wBAAwB;AAC5D,MAAI,CAAC;AAAU;AAEf,MAAI,CAAC,KAAK,aAAa,UAAU,GAAG;AAClC,SAAK,aAAa,YAAY,GAAG;AAAA,EACnC;AAEA,OAAK,aAAa,QAAQ,QAAQ;AAClC,OAAK,aAAa,gBAAgB,SAAS,UAAU,SAAS,OAAO;AAErE,QAAM,eAAe,SAAS,cAAc,MAAM;AAClD,eAAa,YAAY;AACzB,eAAa,aAAa,QAAQ,cAAc;AAChD,eAAa,aAAa,eAAe,MAAM;AAC/C,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,YAAY;AACjB,eAAa,YAAY,IAAI;AAC7B,OAAK,aAAa,cAAc,SAAS,WAAW;AAEpD,QAAM,aAAa,MAAM;AACvB,SAAK,aAAa,gBAAgB,SAAS,UAAU,SAAS,OAAO;AAAA,EACvE;AAEA,QAAM,SAAS,MAAM;AACnB,QAAI,SAAS;AAAU;AACvB,aAAS,UAAU,CAAC,SAAS;AAC7B,eAAW;AACX,aAAS,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAC5D,aAAS,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,EAC/D;AAEA,OAAK,iBAAiB,SAAS,CAAC,UAAU;AACxC,UAAM,eAAe;AACrB,WAAO;AAAA,EACT,CAAC;AAED,OAAK,iBAAiB,WAAW,CAAC,UAAU;AAC1C,QAAI,MAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS;AAC9C,YAAM,eAAe;AACrB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,WAAS,iBAAiB,UAAU,UAAU;AAChD;AAEA,SAAS,kBAAkB,MAAM;AAC/B,MAAI,KAAK,QAAQ;AAAoB;AAErC,QAAM,QAAQ,KAAK,cAAc,qBAAqB;AACtD,MAAI,CAAC;AAAO;AAEZ,OAAK,QAAQ,qBAAqB;AAElC,MAAI,UAAU,KAAK,cAAc,yBAAyB;AAC1D,MAAI,SAAS,KAAK,cAAc,yCAAyC;AACzE,MAAI,SAAS,KAAK,cAAc,kCAAkC;AAElE,MAAI,CAAC,SAAS;AACZ,cAAU,SAAS,cAAc,MAAM;AACvC,YAAQ,YAAY;AACpB,UAAM,OAAO,OAAO;AAAA,EACtB;AAEA,MAAI,CAAC,QAAQ;AACX,aAAS,SAAS,cAAc,MAAM;AACtC,WAAO,YAAY;AACnB,YAAQ,YAAY,MAAM;AAAA,EAC5B;AAEA,MAAI,MAAM,kBAAkB,QAAQ;AAClC,WAAO,YAAY,KAAK;AAAA,EAC1B;AAEA,MAAI,CAAC,QAAQ;AACX,aAAS,SAAS,cAAc,QAAQ;AACxC,YAAQ,YAAY,MAAM;AAAA,EAC5B;AAEA,QAAM,OAAO,MAAM;AACjB,UAAM,UAAU,MAAM,QAAQ,eAAe;AAE7C,QAAI,SAAS;AACX,aAAO,QAAQ;AACf,aAAO,cAAc,IAAI,SAAS;AAClC,cAAQ,QAAQ,QAAQ;AACxB,cAAQ,QAAQ,QAAQ;AACxB,aAAO,QAAQ,QAAQ;AACvB;AAAA,IACF;AAEA,WAAO,QAAQ,MAAM;AACrB,WAAO,cAAc,MAAM;AAC3B,YAAQ,QAAQ,QAAQ,MAAM;AAC9B,WAAO,QAAQ,QAAQ;AACvB,WAAO,OAAO,QAAQ;AAAA,EACxB;AAEA,OAAK;AAEL,QAAM,cAAc,MAAM;AACxB,QAAI,MAAM,QAAQ,eAAe,KAAK;AACpC,YAAM,QAAQ,aAAa;AAAA,IAC7B;AACA,SAAK;AAAA,EACP;AAEA,QAAM,iBAAiB,SAAS,aAAa,EAAE,SAAS,KAAK,CAAC;AAC9D,QAAM,iBAAiB,UAAU,aAAa,EAAE,SAAS,KAAK,CAAC;AACjE;AAEA,SAAS,aAAa,MAAM;AAC1B,MAAI,KAAK,QAAQ;AAAe;AAEhC,QAAM,0BAA0B,CAAC,aAAa;AAC5C,QAAI,KAAK,QAAQ;AAA2B;AAC5C,SAAK,QAAQ,4BAA4B;AAEzC,UAAM,aACJ,OAAO,yBAAyB,OAAO,eAAe,IAAI,GAAG,OAAO,KACpE,OAAO,yBAAyB,iBAAiB,WAAW,OAAO;AAErE,QAAI,YAAY,OAAO,YAAY,KAAK;AACtC,aAAO,eAAe,MAAM,SAAS;AAAA,QACnC,cAAc;AAAA,QACd,YAAY,WAAW;AAAA,QACvB,MAAM;AACJ,iBAAO,WAAW,IAAI,KAAK,IAAI;AAAA,QACjC;AAAA,QACA,IAAI,WAAW;AACb,qBAAW,IAAI,KAAK,MAAM,SAAS;AACnC,mBAAS;AAAA,QACX;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,IAAI,iBAAiB,CAAC,cAAc;AACvD,YAAM,eAAe,UAAU,KAAK,CAAC,aAAa;AAChD,cAAM,OAAO,SAAS;AACtB,eAAO,SAAS,WAAW,SAAS,SAAS,SAAS;AAAA,MACxD,CAAC;AACD,UAAI;AAAc,iBAAS;AAAA,IAC7B,CAAC;AACD,iBAAa,QAAQ,MAAM;AAAA,MACzB,YAAY;AAAA,MACZ,iBAAiB,CAAC,SAAS,OAAO,KAAK;AAAA,IACzC,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,KAAK,QAAQ,OAAO;AAClC,QAAM,sBAAsB,OAAO,UAAU,SAAS,cAAc;AAEpE,QAAM,UACJ,KAAK,MAAM,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC;AACjE,QAAM,WAAW,GAAG,OAAO;AAC3B,OAAK,KAAK;AAEV,MAAI,qBAAqB;AACvB,UAAM,YAAY,MAAM,cAAc,MAAM;AAC5C,QAAI,aAAa,CAAC,UAAU,UAAU,SAAS,sBAAsB,GAAG;AACtE,YAAM,qBACJ,UAAU,aAAa,kBAAkB,KACzC,MAAM,aAAa,kBAAkB,KACrC;AAEF,YAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,cAAQ,YAAY;AACpB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,iBAAiB;AAC/B,cAAQ,MAAM,aAAa;AAE3B,YAAM,WAAW,SAAS,cAAc,MAAM;AAC9C,eAAS,cAAc,sBAAsB,UAAU;AACvD,cAAQ,YAAY,QAAQ;AAE5B,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,aAAO,KAAK;AACZ,aAAO,aAAa,OAAO,OAAO;AAClC,aAAO,MAAM,QACX;AACF,aAAO,MAAM,WAAW;AACxB,aAAO,cAAc,KAAK;AAC1B,cAAQ,YAAY,MAAM;AAE1B,gBAAU,cAAc;AACxB,gBAAU,YAAY,OAAO;AAE7B,YAAM,eAAe,MAAM;AACzB,eAAO,cAAc,KAAK;AAAA,MAC5B;AACA,WAAK,iBAAiB,SAAS,YAAY;AAC3C,WAAK,iBAAiB,UAAU,YAAY;AAC5C,8BAAwB,YAAY;AACpC,mBAAa;AAAA,IACf;AAAA,EACF,OAAO;AACL,QAAI,YAAY,KAAK,QAAQ,kBAAkB;AAC/C,QAAI,CAAC,WAAW;AACd,kBAAY,SAAS,cAAc,KAAK;AACxC,gBAAU,YAAY;AACtB,WAAK,YAAY,aAAa,WAAW,IAAI;AAC7C,gBAAU,YAAY,IAAI;AAAA,IAC5B;AACA,cAAU,MAAM,WAAW;AAE3B,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,KAAK;AACZ,WAAO,aAAa,OAAO,OAAO;AAClC,WAAO,YAAY;AACnB,WAAO,aAAa,aAAa,QAAQ;AACzC,cAAU,YAAY,MAAM;AAE5B,UAAM,eAAe,MAAM;AACzB,YAAM,MAAM,WAAW,KAAK,GAAG,KAAK;AACpC,YAAM,MAAM,WAAW,KAAK,GAAG,KAAK;AACpC,YAAM,QAAQ,WAAW,KAAK,KAAK;AACnC,YAAM,OAAO,QAAQ,QAAQ,MAAM;AACnC,aAAO,MAAM,OAAO,QAAQ,MAAM,GAAG;AACrC,aAAO,cAAc,OAAO,KAAK;AAAA,IACnC;AACA,UAAM,OAAO,MAAM,OAAO,UAAU,IAAI,SAAS;AACjD,UAAM,OAAO,MAAM,OAAO,UAAU,OAAO,SAAS;AACpD,SAAK,iBAAiB,SAAS,YAAY;AAC3C,SAAK,iBAAiB,eAAe,IAAI;AACzC,SAAK,iBAAiB,aAAa,IAAI;AACvC,SAAK,iBAAiB,gBAAgB,IAAI;AAC1C,SAAK,iBAAiB,SAAS,IAAI;AACnC,SAAK,iBAAiB,QAAQ,IAAI;AAClC,SAAK,iBAAiB,UAAU,YAAY;AAC5C,4BAAwB,YAAY;AACpC,iBAAa;AAAA,EACf;AAEA,OAAK,QAAQ,gBAAgB;AAC/B;AAEA,SAAS,gBAAgB,MAAM;AAC7B,MAAI,KAAK,QAAQ;AAAkB;AACnC,OAAK,QAAQ,mBAAmB;AAEhC,QAAM,uBAAuB,CAAC,UAAU;AACtC,QAAI;AACJ,QAAI,MAAM,QAAQ,eAAe,GAAG;AAElC,cAAQ,MAAM,QAAQ,eAAe,EAAE,cAAc,QAAQ;AAAA,IAC/D,OAAO;AACL,cAAQ,MAAM,QAAQ,OAAO;AAAA,IAC/B;AACA,QAAI,CAAC;AAAO;AAEZ,QAAI,MAAM,cAAc,oBAAoB;AAAG;AAE/C,UAAM,WAAW,SAAS,cAAc,MAAM;AAC9C,aAAS,UAAU,IAAI,mBAAmB;AAC1C,aAAS,cAAc;AACvB,aAAS,MAAM,aAAa;AAE5B,UAAM,YAAY,MAAM,cAAc,oBAAoB;AAC1D,QAAI,WAAW;AACb,gBAAU,YAAY,QAAQ;AAAA,IAChC,OAAO;AACL,YAAM,QAAQ,MAAM,cAAc,yBAAyB;AAC3D,UAAI,OAAO;AACT,cAAM,aAAa,UAAU,KAAK;AAAA,MACpC,OAAO;AACL,cAAM,YAAY,QAAQ;AAAA,MAC5B;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,QAAQ,MAAM;AACjC,QAAI,QAAQ,CAAC,KAAK,cAAc,kBAAkB,GAAG;AACnD,YAAM,SAAS,SAAS,cAAc,OAAO;AAC7C,aAAO,UAAU,IAAI,iBAAiB;AACtC,aAAO,cAAc,IAAI,mBAAmB;AAC5C,WAAK;AAAA,QACH;AAAA,QACA,KAAK,cAAc,eAAe,KAAK,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,OAAK,iBAAiB,YAAY,EAAE,QAAQ,CAAC,UAAU;AACrD,yBAAqB,KAAK;AAAA,EAC5B,CAAC;AACH;AAEA,SAAS,iBAAiB,MAAM;AAC9B,MAAI,KAAK,QAAQ;AAAmB;AACpC,OAAK,QAAQ,oBAAoB;AAEjC,OAAK,UAAU,IAAI,QAAQ,aAAa,SAAS;AAEjD,QAAM,WAAW,SAAS,cAAc,OAAO;AAC/C,WAAS,OAAO;AAChB,WAAS,cAAc,IAAI,aAAa;AACxC,WAAS,UAAU,IAAI,cAAc,UAAU;AAC/C,WAAS,MAAM,QAAQ;AAEvB,QAAM,gBAAgB,MACpB,KAAK,cAAc,6CAA6C;AAElE,OAAK,YAAY,QAAQ;AACzB,WAAS,iBAAiB,WAAW,CAAC,UAAU;AAC9C,QAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,OAAO;AAChD,YAAM,QAAQ,SAAS,MAAM,KAAK;AAClC,UAAI,OAAO;AACT,cAAM,eAAe;AAErB,cAAM,aAAa,cAAc;AACjC,cAAM,OAAO,YAAY,SAAS,UAAU,UAAU;AACtD,cAAM,KAAK,cAAc,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC;AACpE,cAAM,QAAQ,SAAS,cAAc,OAAO;AAE5C,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,aAAa,cAAc,EAAE;AAClC,aAAK,cAAc;AAEnB,cAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,cAAM,OAAO;AACb,cAAM,OACJ,YAAY,QAAQ,KAAK,aAAa,WAAW,KAAK;AACxD,cAAM,QAAQ;AACd,cAAM,KAAK;AAEX,cAAM,YAAY,IAAI;AACtB,cAAM,YAAY,KAAK;AAEvB,aAAK,aAAa,OAAO,QAAQ;AACjC,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF,WAAW,MAAM,QAAQ,eAAe,SAAS,UAAU,IAAI;AAC7D,YAAM,eAAe;AACrB,YAAM,SAAS,KAAK,iBAAiB,OAAO;AAC5C,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,YAAY,OAAO,OAAO,SAAS,CAAC;AAC1C,kBAAU,OAAO;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,YAAY,MAAM;AACzB,MAAI,KAAK,QAAQ;AAAc;AAC/B,OAAK,QAAQ,eAAe;AAE5B,MAAI,CAAC,KAAK,aAAa,UAAU,GAAG;AAClC,SAAK,aAAa,YAAY,GAAG;AAAA,EACnC;AACA,MAAI,CAAC,KAAK,aAAa,MAAM,GAAG;AAC9B,SAAK,aAAa,QAAQ,QAAQ;AAAA,EACpC;AAEA,QAAM,WAAW,MAAM;AACrB,UAAM,SAAS,KAAK,aAAa,gBAAgB,MAAM;AACvD,SAAK,aAAa,iBAAiB,SAAS,SAAS,OAAO;AAAA,EAC9D;AAEA,QAAM,aAAa,MAAM;AACvB,UAAM,SAAS,KAAK,aAAa,gBAAgB,MAAM;AACvD,SAAK,aAAa,kBAAkB,SAAS,UAAU,MAAM;AAC7D,aAAS;AAAA,EACX;AAEA,OAAK,iBAAiB,SAAS,CAAC,UAAU;AACxC,QAAI,MAAM;AAAkB;AAC5B,eAAW;AAAA,EACb,CAAC;AAED,OAAK,iBAAiB,WAAW,CAAC,UAAU;AAC1C,QAAI,MAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS;AAC9C,YAAM,eAAe;AACrB,iBAAW;AAAA,IACb;AAAA,EACF,CAAC;AAED,WAAS;AACX;AAEA,SAAS,qBAAqB,MAAM;AAClC,MAAI,KAAK,QAAQ;AAAoB;AACrC,OAAK,QAAQ,qBAAqB;AAElC,MAAI,eAAe;AACnB,MAAI,YAAY;AAEhB,QAAM,WAAW,IAAI,iBAAiB,CAAC,cAAc;AACnD,cAAU,QAAQ,CAAC,aAAa;AAC9B,UAAI,SAAS,kBAAkB,SAAS;AACtC,cAAM,aAAa,KAAK,UAAU,SAAS,aAAa;AACxD,cAAM,OAAO,KAAK,cAAc,UAAU;AAE1C,YAAI,YAAY;AACd,cAAI,MAAM;AACR,gBAAI,CAAC,cAAc;AACjB,6BAAe,KAAK,aAAa,MAAM;AAAA,YACzC;AACA,iBAAK,aAAa,QAAQ,cAAc;AAAA,UAC1C,OAAO;AACL,kBAAM,UAAU,SAAS,cAAc,UAAU;AACjD,oBAAQ,aAAa,QAAQ,cAAc;AAC3C,oBAAQ,aAAa,QAAQ,IAAI;AACjC,iBAAK,aAAa,SAAS,KAAK,UAAU;AAC1C,wBAAY;AAAA,UACd;AAAA,QACF,WAAW,SAAS,UAAU,SAAS,aAAa,GAAG;AACrD,cAAI,MAAM;AACR,gBAAI,WAAW;AACb,mBAAK,OAAO;AACZ,0BAAY;AAAA,YACd,WAAW,cAAc;AACvB,mBAAK,aAAa,QAAQ,YAAY;AACtC,6BAAe;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,WAAS,QAAQ,MAAM;AAAA,IACrB,YAAY;AAAA,IACZ,iBAAiB,CAAC,OAAO;AAAA,IACzB,mBAAmB;AAAA,EACrB,CAAC;AACH;AAOA,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B,CAAC,cAAc,gBAAgB;AAAA,EAC/B,CAAC,sBAAsB,eAAe;AAAA,EACtC,CAAC,sBAAsB,aAAa;AAAA,EACpC,CAAC,qBAAqB,iBAAiB;AAAA,EACvC,CAAC,uBAAuB,YAAY;AAAA,EACpC,CAAC,uBAAuB,eAAe;AAAA,EACvC,CAAC,mCAAmC,gBAAgB;AAAA,EACpD,CAAC,eAAe,WAAW;AAAA,EAC3B,CAAC,4BAA4B,oBAAoB;AACnD,CAAC;AAQM,IAAM,sBAAsB,oBAAoB,IAAI,CAAC,UAAU;AAAA,EACpE,GAAG;AAAA,EACH,KAAK,gBAAgB,IAAI,KAAK,QAAQ,MAAM,MAAM;AAAA,EAAC;AACrD,EAAE;;;ACz0BK,IAAM,6BAA6B;AAAA,EACxC;AAAA,IACE,UAAU;AAAA,IACV,aACE;AAAA,IACF,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aACE;AAAA,IACF,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,aACE;AAAA,QACF,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aACE;AAAA,IACF,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aACE;AAAA,IACF,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aACE;AAAA,IACF,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aACE;AAAA,IACF,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMR,KAAK;AAAA,EACT;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,aACE;AAAA,IACF,UAAU;AAAA;AAAA;AAAA;AAAA,MAIR,KAAK;AAAA,EACT;AACF;;;ACtIA,IAAM,kBAAkB;AACxB,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAEtB,SAAS,oBAAoB,QAAQ,IAAI;AACvC,SAAO,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,KAAK;AAC/C;AAEA,SAAS,uBAAuB,QAAQ,IAAI,UAAU,iBAAiB;AACrE,QAAM,UAAU,MAAM,QAAQ,QAAQ,EAAE;AACxC,QAAM,QAAQ,IAAI,OAAO,UAAW,OAAO,KAAK,GAAG;AACnD,MAAI,MAAM,KAAK,OAAO,GAAG;AACvB,WAAO;AAAA,EACT;AACA,SAAO,GAAG,OAAO,IAAI,OAAO;AAC9B;AAEA,SAAS,qBAAqB,OAAO;AACnC,SAAO,MAAM,QAAQ,UAAU,EAAE;AACnC;AAEA,SAAS,iBAAiB,OAAO;AAC/B,MAAI,cAAc,KAAK,KAAK,GAAG;AAC7B,WAAO,MAAM,QAAQ,eAAe,EAAE,EAAE,QAAQ,QAAQ,EAAE;AAAA,EAC5D;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAO;AAChC,MAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,WAAO,MAAM,UAAU,UAAU,MAAM;AAAA,EACzC;AACA,SAAO;AACT;AAWO,SAAS,sBAAsB,QAAQ,UAAU,CAAC,GAAG;AAC1D,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,cAAc,QAAQ,eAAe,WAAW,OAAO;AAC7D,QAAM,YACH,QAAQ,UAAU,OAAO,QAAQ,QACjC,QAAQ,UAAU,OAAO,QAAQ,QAClC;AAEF,MAAI,CAAC,aAAa,OAAO,cAAc,UAAU;AAC/C,WAAO,oBAAoB,WAAW;AAAA,EACxC;AAEA,MAAI,aAAa,UAAU,KAAK;AAChC,MAAI,CAAC,YAAY;AACf,WAAO,oBAAoB,WAAW;AAAA,EACxC;AAEA,eAAa,WAAW,QAAQ,OAAO,GAAG;AAC1C,eAAa,uBAAuB,YAAY,OAAO;AACvD,eAAa,oBAAoB,UAAU;AAE3C,MAAI,YAAY,KAAK,UAAU,GAAG;AAChC,WAAO;AAAA,EACT;AAEA,eAAa,qBAAqB,UAAU;AAC5C,eAAa,iBAAiB,UAAU;AAExC,MAAI,WAAW,WAAW,GAAG,GAAG;AAC9B,WAAO,oBAAoB,UAAU;AAAA,EACvC;AAEA,eAAa,kBAAkB,UAAU;AAEzC,MAAI,CAAC,WAAW,WAAW,GAAG,GAAG;AAC/B,iBAAa,IAAI,UAAU;AAAA,EAC7B;AAEA,eAAa,WAAW;AAAA,IAAQ;AAAA,IAAQ,CAAC,OAAO,WAC9C,WAAW,IAAI,QAAQ;AAAA,EACzB;AAEA,SAAO,oBAAoB,UAAU;AACvC;;;AC3EA,SAAS,gBAAgB,UAAU;AAEjC,QAAM,YAAY,SAAS,QAAQ,SAAS,EAAE,EAAE,KAAK;AAGrD,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,YAAY,SAAS,UAAU,YAAY,CAAC,GAAG;AACjD,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,QAAM,UAAU,OAAO,WAAW,IAAI;AAEtC,MAAI,CAAC;AAAS,WAAO;AAErB,QAAM,aAAa;AACnB,QAAM,WAAW;AACjB,QAAM,eAAe;AAGrB,UAAQ,OAAO,GAAG,QAAQ,IAAI,YAAY;AAC1C,QAAM,gBAAgB,QAAQ,YAAY,UAAU,EAAE;AAGtD,UAAQ,OAAO,GAAG,QAAQ,KAAK,SAAS,MAAM,YAAY;AAC1D,QAAM,YAAY,QAAQ,YAAY,UAAU,EAAE;AAElD,SAAO,kBAAkB;AAC3B;AAOA,SAAS,mBAAmB,YAAY;AACtC,MAAI,CAAC;AAAY,WAAO;AAGxB,QAAM,QAAQ,WAAW,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AACrD,QAAM,cAAc,MAAM,CAAC;AAG3B,SAAO,YAAY,QAAQ,SAAS,EAAE,EAAE,KAAK;AAC/C;AAUA,eAAsB,eAAe,YAAY,UAAU,CAAC,GAAG;AAC7D,MAAI,CAAC,YAAY;AACf,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAEA,QAAM;AAAA,IACJ,UAAU,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,IAC7B,SAAS;AAAA,EACX,IAAI;AAEJ,QAAM,cAAc,mBAAmB,UAAU;AAEjD,MAAI,CAAC,aAAa;AAChB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAGA,MAAI,gBAAgB,WAAW,GAAG;AAChC,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAGA,QAAM,cAAc,mBAAmB,WAAW;AAClD,QAAM,eAAe,SAAS;AAAA,IAC5B,6CAA6C,WAAW;AAAA,EAC1D;AAEA,MAAI,cAAc;AAChB,IAAAC,KAAI,IAAI,OAAO,SAAS,WAAW,gCAAgC;AACnE,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAEA,EAAAA,KAAI,IAAI,OAAO,iBAAiB,WAAW,wBAAwB;AAEnE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,MAAM;AAGX,UAAM,eAAe,SACjB,eAAe,QAAQ,KAAK,KAAK,CAAC,MAAM,QAAQ,KAAK,KAAK,CAAC,KAC3D,QAAQ,QAAQ,KAAK,GAAG,CAAC;AAE7B,SAAK,OAAO,4CAA4C,WAAW,IAAI,YAAY;AAGnF,SAAK,aAAa,oBAAoB,WAAW;AAEjD,SAAK,SAAS,MAAM;AAClB,MAAAA,KAAI,IAAI,OAAO,6BAA6B,WAAW,GAAG;AAC1D,cAAQ;AAAA,IACV;AAEA,SAAK,UAAU,MAAM;AACnB,MAAAA,KAAI,IAAI,QAAQ,wBAAwB,WAAW,qBAAqB;AACxE,aAAO,IAAI,MAAM,wBAAwB,WAAW,EAAE,CAAC;AAAA,IACzD;AAEA,aAAS,KAAK,YAAY,IAAI;AAG9B,eAAW,MAAM;AACf,UAAI,CAAC,gBAAgB,WAAW,GAAG;AACjC,QAAAA,KAAI,IAAI,QAAQ,SAAS,WAAW,+BAA+B;AAAA,MACrE;AACA,cAAQ;AAAA,IACV,GAAG,GAAI;AAAA,EACT,CAAC;AACH;AAOA,eAAsB,oBAAoB,kBAAkB;AAC1D,MAAI,CAAC,kBAAkB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAEA,QAAM,eAAe,oBAAI,IAAI;AAG7B,MAAI,iBAAiB,oBAAoB;AACvC,iBAAa,IAAI,iBAAiB,kBAAkB;AAAA,EACtD;AACA,MAAI,iBAAiB,gBAAgB;AACnC,iBAAa,IAAI,iBAAiB,cAAc;AAAA,EAClD;AACA,MAAI,iBAAiB,gBAAgB;AACnC,iBAAa,IAAI,iBAAiB,cAAc;AAAA,EAClD;AAGA,QAAM,eAAe,MAAM,KAAK,YAAY,EAAE;AAAA,IAAI,gBAChD,eAAe,UAAU,EAAE,MAAM,SAAO;AACtC,MAAAA,KAAI,IAAI,QAAQ,wBAAwB,UAAU,IAAI,GAAG;AAAA,IAE3D,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,IAAI,YAAY;AAChC;;;ACnLA,eAAe,uBAAuB,MAAM;AAC1C,MAAI,OAAO,CAAC;AACZ,MAAI,KAAK,UAAU,OAAO,KAAK,KAAK,SAAS,CAAC,MAAM,UAAU;AAC5D,WAAO,KAAK,IAAI,KAAK,CAAC;AAAA,EACxB;AACA,QAAM,OAAO;AAEb,QAAM;AAAA,IACJ;AAAA,IACA,SAAS,CAAC,QAAQ,GAAG,GAAG;AAAA,IACxB,UAAU,CAAC,KAAK,QAAQ,QAAQ,MAAM,yBAAyB,GAAG,KAAK,GAAG;AAAA,EAC5E,IAAI;AAEJ,QAAM,OAAO,UACT,IAAI;AAAA,IACF;AAAA,IACA,OAAO,aAAa,cAAc,SAAS,OAAO,YAAY;AAAA,EAChE,IACA,IAAI,IAAI,MAAM,YAAY,GAAG;AAEjC,QAAM,WAAW,CAAC,QAChB,IAAI,YAAY,EAAE,QAAQ,iBAAiB,CAAC,GAAG,IAAI,MAAM,EAAE,YAAY,CAAC;AAE1E,QAAM,UAAU,OAAO,QAAQ;AAC7B,QAAI;AACF,UAAI,eAAe,IAAI,GAAG;AAAG,eAAO,EAAE,KAAK,QAAQ,kBAAkB;AAGrE,YAAM,OAAO,OAAO,GAAG;AACvB,YAAM,OAAO,gBAAgB,MAAM,KAAK,OAAO,IAAI,IAAI,MAAM,IAAI,EAAE;AACnE,YAAM,MAAM,MAAM,OAAO;AACzB,YAAM,QAAQ,KAAK,WAAW,MAAM,SAAS,GAAG,CAAC;AAEjD,UAAI,CAAC,OAAO;AACV,YAAI,eAAe,IAAI,GAAG;AAAG,iBAAO,EAAE,KAAK,QAAQ,eAAe;AAClE,cAAM,IAAI;AAAA,UACR,uBAAuB,GAAG,8CAA8C;AAAA,YACtE;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,UAAI,CAAC,eAAe,IAAI,GAAG,GAAG;AAC5B,uBAAe,OAAO,KAAK,KAAK;AAChC,eAAO,EAAE,KAAK,QAAQ,UAAU;AAAA,MAClC;AACA,aAAO,EAAE,KAAK,QAAQ,uBAAuB;AAAA,IAC/C,SAAS,KAAK;AACZ,cAAQ,KAAK,GAAG;AAChB,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,QAAQ,IAAI,KAAK,IAAI,OAAO,CAAC;AACtC;AAuBO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAY,UAAU,CAAC,GAAG;AACxB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,MAAM;AAAA,MAClB,kBAAkB;AAAA,MAClB,OAAO;AAAA,MACP,eAAe;AAAA,MACf,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,YAAY,CAAC;AAAA;AAAA,MACb,oBAAoB;AAAA,IACtB,IAAI;AAEJ,UAAM,UAAU,oBAAI,IAAI;AACxB,UAAM,WAAW,oBAAI,IAAI;AACzB,UAAM,eAAe,oBAAI,IAAI;AAC7B,UAAM,mBAAmB,oBAAI,IAAI;AACjC,UAAM,kBAAkB,oBAAI,QAAQ;AACpC,UAAM,kBAAkB,oBAAI,QAAQ;AACpC,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,sBAAsB;AAE1B,UAAM,iBAAiB,CAAC,YAAY;AAElC,UAAI,CAAC,WAAW,CAAC,UAAU;AAAQ;AAGnC,UAAI,mBAAmB,gBAAgB,IAAI,OAAO;AAClD,UAAI,CAAC,kBAAkB;AACrB,2BAAmB,oBAAI,IAAI;AAC3B,wBAAgB,IAAI,SAAS,gBAAgB;AAAA,MAC/C;AAGA,iBAAW,YAAY,WAAW;AAChC,YAAI,CAAC,SAAS,YAAY,CAAC,SAAS;AAAK;AAGzC,YAAI,iBAAiB,IAAI,SAAS,QAAQ;AAAG;AAE7C,YAAI;AAEF,cAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,QAAQ,GAAG;AACzD,qBAAS,IAAI,OAAO;AAEpB,6BAAiB,IAAI,SAAS,QAAQ;AAAA,UACxC;AAAA,QACF,SAAS,KAAK;AACZ,kBAAQ;AAAA,YACN,uDAAuD,SAAS,QAAQ;AAAA,YACxE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,CAAC,KAAK,OAAsB;AAC3C,UAAI;AAAS;AACb,UAAI,CAAC,OAAO,CAAC,IAAI,SAAS,GAAG;AAAG;AAChC,UAAI,eAAe,IAAI,GAAG;AAAG;AAC7B,UAAI,SAAS,IAAI,GAAG;AAAG;AACvB,UAAI,aAAa,IAAI,GAAG;AAAG;AAG3B,UAAI,MAAM,GAAG,cAAc;AACzB,cAAM,WAAW,GAAG,aAAa,eAAe;AAChD,YAAI,YAAY,CAAC,iBAAiB,IAAI,GAAG,GAAG;AAC1C,2BAAiB,IAAI,KAAK,QAAQ;AAAA,QACpC;AAAA,MACF;AAEA,cAAQ,IAAI,GAAG;AACf,eAAS;AAAA,IACX;AAEA,UAAM,WAAW,MAAM;AACrB,UAAI;AAAO;AACX,cAAQ,WAAW,OAAO,UAAU;AAAA,IACtC;AAEA,UAAM,YAAY,CAAC,aAAa;AAE9B,UAAI,CAAC;AAAU;AAGf,UAAI,SAAS,aAAa,GAAG;AAC3B,cAAM;AAAA;AAAA,UAA6B;AAAA;AACnC,cAAM,MAAM,GAAG,SAAS,YAAY;AACpC,YACE,OACA,IAAI,SAAS,GAAG,KAChB,CAAC,eAAe,IAAI,GAAG,KACvB,UAAU,KAAK,EAAE,GACjB;AACA,mBAAS,KAAK,EAAE;AAAA,QAClB;AAGA,uBAAe,EAAE;AAGjB,YAAI,kBAAkB,GAAG,YAAY;AACnC,4BAAkB,GAAG,UAAU;AAAA,QACjC;AAAA,MACF;AAGA,UAAI,SAAS,kBAAkB;AAC7B,iBAAS,iBAAiB,GAAG,EAAE,QAAQ,CAAC,MAAM;AAC5C,gBAAM,IAAI,EAAE,SAAS,YAAY;AACjC,cACE,KACA,EAAE,SAAS,GAAG,KACd,CAAC,eAAe,IAAI,CAAC,KACrB,UAAU,GAAG,CAAC,GACd;AACA,qBAAS,GAAG,CAAC;AAAA,UACf;AAGA,yBAAe,CAAC;AAEhB,cAAI,kBAAkB,EAAE,YAAY;AAClC,8BAAkB,EAAE,UAAU;AAAA,UAChC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,oBAAoB,CAAC,OAAO;AAChC,UAAI,CAAC,MAAM,gBAAgB,IAAI,EAAE;AAAG;AAEpC,gBAAU,EAAE;AAEZ,YAAM,KAAK,IAAI,iBAAiB,CAAC,cAAc;AAC7C,mBAAW,KAAK,WAAW;AACzB,YAAE,YAAY,QAAQ,CAAC,MAAM;AAC3B,sBAAU,CAAC;AAAA,UACb,CAAC;AACD,cAAI,EAAE,SAAS,gBAAgB,EAAE,QAAQ;AACvC,sBAAU,EAAE,MAAM;AAAA,UACpB;AAAA,QACF;AAAA,MACF,CAAC;AACD,SAAG,QAAQ,IAAI;AAAA,QACb,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,iBAAiB;AAAA,UACf;AAAA,UACA,GAAG,UACA,IAAI,CAAC,MAAM,EAAE,QAAQ,EACrB,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,CAAC;AAAA,QACxC;AAAA,MACF,CAAC;AACD,sBAAgB,IAAI,IAAI,EAAE;AAAA,IAC5B;AAEA,mBAAe,QAAQ;AACrB,mBAAa,KAAK;AAClB,cAAQ;AACR,UAAI,CAAC,QAAQ;AAAM;AAEnB,YAAM,OAAO,MAAM,KAAK,OAAO;AAC/B,cAAQ,MAAM;AACd,WAAK,QAAQ,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC;AAEnC,UAAI;AACF,cAAM,kBAAkB,CAAC,QACvB,iBAAiB,IAAI,GAAG,MAAM,SAAS,OAAO,GAAG,IAAI,GAAG,GAAG;AAE7D,cAAM,oBAAoB,GAAG,MAAM;AAAA,UACjC;AAAA,UACA,QAAQ;AAAA,UACR,SAAS,CAAC,KAAK,QAAQ;AACrB,yBAAa,IAAI,GAAG;AACpB,sBAAU,KAAK,GAAG;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH,QAAQ;AAAA,MAER,UAAE;AACA,aAAK,QAAQ,CAAC,MAAM,SAAS,OAAO,CAAC,CAAC;AAAA,MACxC;AAAA,IACF;AAGA,UAAM,YAAY,SAAS,WAAW,SAAS,kBAAkB;AACjE,UAAM,MAAM,IAAI,iBAAiB,CAAC,cAAc;AAC9C,iBAAW,KAAK,WAAW;AACzB,UAAE,YAAY,QAAQ,CAAC,MAAM;AAC3B,oBAAU,CAAC;AAAA,QACb,CAAC;AACD,YAAI,EAAE,SAAS,gBAAgB,EAAE,QAAQ;AACvC,oBAAU,EAAE,MAAM;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,QAAQ,WAAW;AAAA,MACrB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,iBAAiB;AAAA,QACf;AAAA,QACA,GAAG,UACA,IAAI,CAAC,MAAM,EAAE,QAAQ,EACrB,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,CAAC;AAAA,MACxC;AAAA,IACF,CAAC;AAGD,QAAI,kBAAkB,qBAAqB,QAAQ,UAAU,cAAc;AACzE,YAAM,OAAO,QAAQ,UAAU;AAC/B,cAAQ,UAAU,eAAe,SAAS,oBAAoB,MAAM;AAClE,cAAM,KAAK,KAAK,KAAK,MAAM,IAAI;AAC/B,YAAI,QAAQ,KAAK,SAAS,QAAQ;AAChC,4BAAkB,EAAE;AAEpB,gBAAM,MAAM,KAAK,SAAS,YAAY;AACtC,cAAI,OAAO,IAAI,SAAS,GAAG,KAAK,CAAC,eAAe,IAAI,GAAG,GAAG;AACxD,qBAAS,KAAK,IAAI;AAAA,UACpB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,4BAAsB,MAAO,QAAQ,UAAU,eAAe;AAAA,IAChE;AAGA,QAAI,cAAc;AAChB,gBAAU,SAAS;AAAA,IACrB;AAEA,WAAO;AAAA,MACL,OAAO;AACL,kBAAU;AACV,YAAI,WAAW;AACf,YAAI;AAAqB,8BAAoB;AAC7C,YAAI,OAAO;AACT,uBAAa,KAAK;AAClB,kBAAQ;AAAA,QACV;AAEA,wBAAgB,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC;AAAA,MACjD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,UAAU,MAAM;AAC3B,QAAI,OAAO,CAAC;AACZ,QAAI,KAAK,UAAU,OAAO,KAAK,KAAK,SAAS,CAAC,MAAM,UAAU;AAC5D,aAAO,KAAK,IAAI,KAAK,CAAC;AAAA,IACxB;AACA,UAAM,OAAO;AAEb,UAAM;AAAA,MACJ;AAAA,MACA,SAAS,CAAC,QAAQ,GAAG,GAAG;AAAA,MACxB,UAAU,CAAC,KAAK,QACd,QAAQ,MAAM,yBAAyB,GAAG,KAAK,GAAG;AAAA,IACtD,IAAI;AAEJ,UAAM,OAAO,UACT,IAAI;AAAA,MACF;AAAA,MACA,OAAO,aAAa,cAAc,SAAS,OAAO,YAAY;AAAA,IAChE,IACA,IAAI,IAAI,MAAM,YAAY,GAAG;AAEjC,UAAM,WAAW,CAAC,QAChB,IAAI,YAAY,EAAE,QAAQ,iBAAiB,CAAC,GAAG,IAAI,MAAM,EAAE,YAAY,CAAC;AAE1E,UAAM,UAAU,OAAO,QAAQ;AAC7B,UAAI;AACF,YAAI,eAAe,IAAI,GAAG;AAAG,iBAAO,EAAE,KAAK,QAAQ,kBAAkB;AAGrE,cAAM,OAAO,OAAO,GAAG;AACvB,cAAM,OAAO,gBAAgB,MAAM,KAAK,OAAO,IAAI,IAAI,MAAM,IAAI,EAAE;AACnE,cAAM,MAAM,MAAM,OAAO;AACzB,cAAM,QAAQ,KAAK,WAAW,MAAM,SAAS,GAAG,CAAC;AAEjD,YAAI,CAAC,OAAO;AACV,cAAI,eAAe,IAAI,GAAG;AAAG,mBAAO,EAAE,KAAK,QAAQ,eAAe;AAClE,gBAAM,IAAI;AAAA,YACR,uBAAuB,GAAG,8CAA8C;AAAA,cACtE;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAEA,YAAI,CAAC,eAAe,IAAI,GAAG,GAAG;AAC5B,yBAAe,OAAO,KAAK,KAAK;AAChC,iBAAO,EAAE,KAAK,QAAQ,UAAU;AAAA,QAClC;AACA,eAAO,EAAE,KAAK,QAAQ,uBAAuB;AAAA,MAC/C,SAAS,KAAK;AACZ,gBAAQ,KAAK,GAAG;AAChB,cAAM;AAAA,MACR;AAAA,IACF;AAEA,WAAO,QAAQ,IAAI,KAAK,IAAI,OAAO,CAAC;AAAA,EACtC;AACF;;;AChYA,IAAM,2BAA2B;AACjC,IAAM,kBAAkB,MAAM;AAC5B,MAAI;AACF,WAAO,YAAY;AAAA,EACrB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF,GAAG;AAEI,IAAMC,uBAAsB,CAAC,UAClC,OAAO,UAAU,YAAY,MAAM,UAAU,CAAC,MAAM,SAAS,GAAG,IAC5D,GAAG,KAAK,MACR;AAEC,SAAS,uBAAuB,OAAO,UAAU,CAAC,GAAG;AAC1D,MAAI,CAAC,SAAS,yBAAyB,KAAK,KAAK,GAAG;AAClD,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,eAAe,KAAK,IAAI;AAEhC,QAAM,YAAY,MAAM;AACtB,QAAI,CAAC;AAAgB,aAAO;AAC5B,QAAI;AACF,aAAO,IAAI,IAAI,OAAO,cAAc,EAAE;AAAA,IACxC,SAAS,GAAG;AACV,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,YAAY,MAAM;AACtB,QAAI,OAAO,WAAW,eAAe,CAAC,OAAO,UAAU,QAAQ;AAC7D,aAAO;AAAA,IACT;AACA,QAAI;AACF,aAAO,IAAI,IAAI,OAAO,OAAO,SAAS,MAAM,EAAE;AAAA,IAChD,SAAS,GAAG;AACV,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,WAAW,eACb,UAAU,KAAK,UAAU,IACzB,UAAU,KAAK,UAAU;AAE7B,SAAO,YAAY;AACrB;AAEA,IAAM,iCAAiC,MAAM;AAC3C,MAAI,CAAC;AAAgB,WAAO;AAC5B,MAAI;AACF,UAAM,SAAS,IAAI,IAAI,cAAc;AACrC,QAAI,yBAAyB,KAAK,OAAO,QAAQ,GAAG;AAClD,aAAO,IAAI,IAAI,WAAW,cAAc,EAAE;AAAA,IAC5C;AAAA,EACF,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACA,SAAO;AACT,GAAG;AAEH,IAAI,yBAAyB;AAEtB,SAAS,mBAAmBC,MAAK;AACtC,MAAI,0BAA0B,OAAO,aAAa;AAAa;AAC/D,2BAAyB;AACzB,EAAAA,KAAI,iBAAiB,aAAa,CAAC,UAAU;AAC3C,UAAM,OAAO,MAAM,QAAQ;AAC3B,QAAI,MAAM;AACR,eAAS,gBAAgB,UAAU,IAAI,OAAO,IAAI,IAAI,WAAW;AAAA,IACnE;AAAA,EACF,CAAC;AACH;AAGA,SAAS,YAAY,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG;AAC7C,MAAI,CAAC,UAAU,OAAO,WAAW;AAAU,WAAO;AAClD,QAAM,MAAM,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,OAAO;AAC9D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAI,GAAG,IAAI;AAAA,QACT,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,MAAM,WAAW,IAAI,GAAG,IAAI,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAI,GAAG,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAGA,SAAS,UAAUC,OAAM,IAAI;AAC3B,SAAO,OAAOA,IAAG,EACd,YAAY,EACZ,QAAQ,MAAM,OAAO,EACrB,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE;AAC3B;AAGO,SAAS,eAAe,KAAK;AAClC,MAAI,QAAQ,QAAQ,QAAQ;AAAW,WAAO;AAC9C,MAAI,OAAO,QAAQ;AAAY,WAAO;AACtC,MAAI,OAAO,QAAQ;AAAU,WAAO;AAEpC,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,SAAS,MAAS;AAAA,EACpF;AAEA,QAAM,SAAS,CAAC;AAChB,aAAW,OAAO,KAAK;AACrB,QAAI,IAAI,eAAe,GAAG,GAAG;AAC3B,YAAM,QAAQ,IAAI,GAAG;AACrB,UAAI,OAAO,UAAU,YAAY;AAC/B,cAAM,WAAW,eAAe,KAAK;AACrC,YAAI,aAAa,QAAW;AAC1B,iBAAO,GAAG,IAAI;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAO;AACpC,QAAM,iBAAiB,eAAe,KAAK;AAC3C,MAAI,OAAO,oBAAoB,YAAY;AACzC,WAAO,gBAAgB,cAAc;AAAA,EACvC;AACA,SAAO,KAAK,MAAM,KAAK,UAAU,cAAc,CAAC;AAClD;AAGO,SAAS,oBACd,cAAc,CAAC,GACf,UAAU,CAAC,GACX,EAAE,SAAAC,UAAS,YAAAC,aAAY,sBAAAC,uBAAsB,oBAAAC,oBAAmB,IAAI,CAAC,GACrE;AACA,QAAM,QACJ,eAAe,OAAO,YAAY,QAAQ,aACtC,YAAY,MACZF;AAGN,QAAM,gBACJ,OAAO,gBAAgB,aACtB,YAAY,eACX,gBAAgB,eAChB,mBAAmB,eACnB,WAAW,eACX,cAAc,eACd,YAAY,eACZ,cAAc,eACd,UAAU,eACV,gBAAgB,eAChB,WAAW;AAGf,MAAI,kBAAkB,eAAe,YAAY;AACjD,MAAI,mBAAmB,CAAC,MAAM,QAAQ,eAAe,GAAG;AAEtD,sBAAkB,OAAO,OAAO,eAAe;AAAA,EACjD;AACA,QAAM,YAAY,mBAAmB,QAAQ,aAAa,CAAC;AAG3D,QAAM,WAAW,eAAe,YAAY;AAC5C,QAAM,kBAAkB,eAAe,YAAY;AACnD,QAAM,gBACJ,eACA,YAAY,SACZ,OAAO,YAAY,UAAU,WACzB,YAAY,QACZ;AAEN,QAAM,cACJ,aAAa,eAAe,CAAC,MAC7B,aAAa,eAAe,CAAC,MAC7B,gBAAgB,eAAe,CAAC;AAElC,MAAI,eAAe,OAAO,gBAAgB,YAAY,OAAOE,wBAAuB,YAAY;AAC9F,IAAAA,oBAAmB,aAAa,EAAE,KAAK,OAAO,SAAS,YAAY,CAAC;AAAA,EACtE;AAEA,MAAI;AACJ,MAAI,aAAa;AAEjB,MAAI,aAAa;AACf,QACE,mBACA,OAAO,oBAAoB,YAC3B,OAAOD,0BAAyB,YAChC;AACA,MAAAA,sBAAqB,iBAAiB,EAAE,KAAK,OAAO,SAAS,YAAY,CAAC;AAAA,IAC5E;AAEA,UAAM,kBAAkB,OAAO,YAAY,SAAS,EAAE,YAAY;AAClE,UAAM,QACJF,WAAU,eAAe,KACzB,OAAO,OAAOA,YAAW,CAAC,CAAC,EAAE;AAAA,MAC3B,CAAC,MACC,UAAU,EAAE,IAAI,MAAM,mBACtB,OAAO,EAAE,QAAQ,EAAE,EAAE,YAAY,MAAM;AAAA,IAC3C;AACF,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,0BAA0B,YAAY,SAAS,GAAG;AAEpE,iBAAa;AAAA,MACX,IAAI,MAAM,MAAM,UAAU,MAAM,IAAI;AAAA,MACpC,MAAM,MAAM,QAAQ,MAAM,MAAM,OAAO,eAAe;AAAA,IACxD;AAGA,QAAI,eAAe,sBAAsB,KAAK;AAC9C,QACG,mBAAmB,OAAO,oBAAoB,YAC/C,eACA;AAEA,YAAM,kBAAkB,kBACpB,eAAe,eAAe,IAC9B,CAAC;AACL,YAAM,iBAAiB,gBACnB,eAAe,aAAa,IAC5B;AACJ,YAAM,kBAAkB,iBACpB,YAAY,iBAAiB,EAAE,OAAO,eAAe,CAAC,IACtD;AACJ,qBAAe,YAAY,cAAc,sBAAsB,eAAe,CAAC;AAAA,IACjF;AAIA,UAAM;AAAA,MACJ;AAAA,MAAM;AAAA,MAAY;AAAA,MAAmB;AAAA,MACrC;AAAA,MAAiB;AAAA,MAAe;AAAA,MAChC;AAAA,MAAY;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,MAAS,QAAQ;AAAA,MAAS,WAAW;AAAA,MAC7C,KAAK;AAAA,MACL,GAAG;AAAA,IACL,IAAI;AAEJ,sBAAkB;AAAA,MAChB,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ,WAAW;AAAA,MACnB,KAAK,WAAWC;AAAA,IAClB;AAAA,EACF,WAAW,eAAe;AACxB,QAAI,OAAOC,0BAAyB,YAAY;AAC9C,MAAAA,sBAAqB,aAAa,EAAE,KAAK,OAAO,SAAS,YAAY,CAAC;AAAA,IACxE;AAEA,UAAM,EAAE,KAAK,SAAS,GAAG,aAAa,IAAI;AAC1C,sBAAkB;AAAA,MAChB,QAAQ,sBAAsB,YAAY;AAAA,MAC1C,KAAK,WAAWD;AAAA,IAClB;AAAA,EACF,OAAO;AAEL,UAAM,eACJD,WAAU,SAAS,KACnB,OAAO,OAAOA,YAAW,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,EAAE,IAAI,MAAM,SAAS;AAC1E,QAAI,CAAC;AAAc,YAAM,IAAI,MAAM,kCAAkC;AACrE,iBAAa;AAAA,MACX,IAAI,aAAa,MAAM;AAAA,MACvB,MAAM,aAAa,QAAQ;AAAA,IAC7B;AACA,sBAAkB;AAAA,MAChB,QAAQ,sBAAsB,YAAY;AAAA,MAC1C,QAAQ,WAAW;AAAA,MACnB,KAAKC;AAAA,IACP;AAAA,EACF;AAEA,SAAO,EAAE,iBAAiB,WAAW,WAAW;AAClD;AAGO,SAAS,qBAAqB,EAAE,aAAa,iBAAiB,oBAAoB,4BAA4B,GAAG;AACtH,MAAI,gBAAgB;AACpB,MAAI,cAAc;AAClB,MAAI,eAAe,OAAO,WAAW,aAAa;AAEhD,QAAI;AACF,oBAAc,aAAa,QAAQ,eAAe,KAAK;AAAA,IACzD,SAAS,GAAG;AACV,oBAAc;AAAA,IAChB;AAGA,QAAI;AACF,2BAAqB,WAAW;AAChC,oCAA8B,WAAW;AAAA,IAC3C,SAAS,GAAG;AAAA,IAAC;AAGb,QAAI,aAAa;AACf,UAAI,gBAAgB,UAAU;AAC5B,cAAM,cACJ,OAAO,cACP,OAAO,WAAW,8BAA8B,EAAE;AACpD,wBAAgB,cAAc,SAAS;AAAA,MACzC,OAAO;AACL,wBAAgB;AAAA,MAClB;AAAA,IACF,OAAO;AACL,YAAM,cACJ,OAAO,cACP,OAAO,WAAW,8BAA8B,EAAE;AACpD,sBAAgB,cAAc,SAAS;AAAA,IACzC;AAAA,EACF;AACA,SAAO,EAAE,eAAe,YAAY;AACtC;AAEO,SAAS,wBAAwB,QAAQ,EAAE,uBAAAG,uBAAsB,GAAG;AACzE,QAAM,gBAAgB,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,IAAI;AAC1E,MAAI,YAAYA,uBAAsB,MAAM;AAE5C,MAAI,CAAC,iBAAiB,+BAA+B;AACnD,gBAAY;AAAA,EACd;AAEA,SAAOP,qBAAoB,uBAAuB,SAAS,CAAC;AAC9D;AAGA,eAAsB,6BAA6B,SAAS,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,GAAG;AACvF,QAAM;AAAA,IACJ,oBAAoB;AAAA,IACpB,oBAAoB,CAAC;AAAA,IACrB,mBAAmB;AAAA,IACnB,YAAY,CAAC;AAAA,IACb,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,EAC3B,IAAI;AAGJ,QAAM,mBAAmB,MAAM;AAC7B,UAAM,MAAM,oBAAI,IAAI;AACpB,KAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,UAAU,CAAC,CAAC;AAC3D,KAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,UAAU,CAAC,CAAC;AACvD,WAAO,MAAM,KAAK,IAAI,OAAO,CAAC;AAAA,EAChC,GAAG;AAGH,MAAI,cAAc;AAClB,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AACpE,UAAM,kBAAkB;AAExB,UAAM,gBAAgB,CAAC,QAAQ;AAC7B,cAAQ,KAAK;AAAA,QACX,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO,GAAG,GAAG;AAAA,MACjB;AAAA,IACF;AAKA,UAAM;AAAA,MACJ,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,GAAG;AAAA,IACL,IACE,uBAAuB,OAAO,wBAAwB,WAClD,sBACA,CAAC;AAEP,UAAM,+BAA+B,MAAM;AACzC,UAAI,CAAC;AAAmB,eAAO,CAAC;AAChC,UAAI,MAAM,QAAQ,iBAAiB;AAAG,eAAO;AAC7C,UAAI,OAAO,sBAAsB,UAAU;AACzC,eAAO,OAAO,OAAO,iBAAiB;AAAA,MACxC;AACA,aAAO,CAAC;AAAA,IACV,GAAG;AAEH,UAAM,qBAAqB,MAAM;AAC/B,YAAM,MAAM,oBAAI,IAAI;AACpB,OAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,aAAa;AAC5C,YAAI,CAAC,UAAU;AAAU;AACzB,YAAI,IAAI,SAAS,UAAU,QAAQ;AAAA,MACrC,CAAC;AAED,OAAC,+BAA+B,CAAC,GAAG,QAAQ,CAAC,aAAa;AACxD,YAAI,CAAC,UAAU;AAAU;AACzB,cAAM,WAAW,IAAI,IAAI,SAAS,QAAQ,KAAK;AAC/C,YAAI,IAAI,SAAS,UAAU;AAAA,UACzB,GAAI,YAAY,CAAC;AAAA,UACjB,GAAG;AAAA,UACH,KACE,OAAO,UAAU,QAAQ,aACrB,SAAS,MACT,UAAU;AAAA,QAClB,CAAC;AAAA,MACH,CAAC;AAED,aAAO,MAAM,KAAK,IAAI,OAAO,CAAC;AAAA,IAChC,GAAG;AAEH,UAAM,oBAAoB,oBACtBA;AAAA,MACE,uBAAuB,mBAAmB;AAAA,QACxC,cAAc;AAAA,MAChB,CAAC;AAAA,IACH,IACA;AAEJ,UAAM,mBAAmB;AAAA,MACvB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,SAAS,CAAC,KAAK,QAAQ;AACrB,YAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,MAAM,GAAG;AACrD,gBAAM,yBAAyB,CAAC,YAAY,YAAY;AACxD,gBAAM,iBAAiB,uBAAuB,SAAS,GAAG;AAC1D,gBAAM,oBAAoB,KAAK,SAAS,SAAS,UAAU,KAChC,KAAK,SAAS,SAAS,oCAAoC;AAEtF,cAAI,kBAAkB,mBAAmB;AACvC,YAAAC,KAAI;AAAA,cACF;AAAA,cACA,yBAAoB,GAAG;AAAA;AAAA,YAEzB;AAAA,UACF,OAAO;AACL,YAAAA,KAAI;AAAA,cACF;AAAA,cACA,+BAAqB,GAAG;AAAA,YAC1B;AAAA,UACF;AAAA,QACF,OAAO;AACL,UAAAA,KAAI,IAAI,SAAS,iCAA4B,GAAG,MAAM,GAAG;AAAA,QAC3D;AAAA,MACF;AAAA;AAAA,MAEA,GAAG;AAAA,MACH,QAAQ,CAAC,QAAQ;AAEf,YAAI,eAAe,IAAI,GAAG;AAAG,iBAAO;AAGpC,YAAI,OAAO,qBAAqB,YAAY;AAC1C,cAAI;AACF,kBAAM,SAAS,iBAAiB,GAAG;AACnC,gBAAI,WAAW,QAAW;AACxB,qBAAO,cAAc,GAAG;AAAA,YAC1B;AACA,mBAAO;AAAA,UACT,SAAS,GAAG;AACV,YAAAA,KAAI;AAAA,cACF;AAAA,cACA;AAAA,cACA,GAAG,WAAW;AAAA,YAChB;AACA,mBAAO,cAAc,GAAG;AAAA,UAC1B;AAAA,QACF;AAGA,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,IACF;AAEA,kBAAc,IAAI,gBAAgB,gBAAgB;AAClD,QACE,kBAAkB,SAAS,KAC3B,OAAO,gBAAgB,WAAW,YAClC;AACA,YAAM,gBAAgB,OAAO,GAAG,mBAAmB;AAAA,QACjD,SAAS;AAAA,QACT,QAAQ,iBAAiB;AAAA,QACzB,SAAS,iBAAiB;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,EAAE,aAAa,gBAAgB;AACxC;;;AChfA,IAAM,iBAAiB,CAAC,SAAS,MAAM;AACvC,IAAM,eAAe,IAAI,IAAI,cAAc;AAEpC,SAAS,sBAAsB,QAAQ;AAC5C,QAAM,SAAS,MAAM,QAAQ,QAAQ,MAAM,IACvC,OAAO,OAAO,IAAI,CAAC,UAAU,OAAO,KAAK,EAAE,YAAY,CAAC,IACxD;AACJ,QAAM,aAAa,OAAO,OAAO,CAAC,UAAU,aAAa,IAAI,KAAK,CAAC;AACnE,SAAO,WAAW,SAAS,aAAa;AAC1C;AAEO,SAAS,uBAAuB,YAAY,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG;AACjF,QAAM,aAAa,OAAO,cAAc,EAAE,EAAE,YAAY;AACxD,MAAI,aAAa,IAAI,UAAU;AAAG,WAAO;AAEzC,MAAI,kBAAkB,OAAO,aAAa,aAAa;AACrD,UAAM,UAAU,SAAS,iBAAiB,aAAa,YAAY;AACnE,QAAI,aAAa,IAAI,OAAO;AAAG,aAAO;AAAA,EACxC;AAEA,MAAI,OAAO,WAAW,eAAe,OAAO,YAAY;AACtD,UAAM,cAAc,OAAO,WAAW,8BAA8B,EAAE;AACtE,WAAO,cAAc,SAAS;AAAA,EAChC;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,QAAQ,iBAAiB;AAC/D,QAAM,gBAAgB,uBAAuB,eAAe;AAC5D,QAAM,SAAS,sBAAsB,MAAM;AAC3C,SAAO,OAAO,SAAS,aAAa;AACtC;;;ACOA,IAAI,iBAAiB;AAErB,IAAM,sBAAsB;AAC5B,IAAM,4BAA4B;AAElC,SAAS,WAAW,OAAO,OAAO,oBAAI,QAAQ,GAAG;AAC/C,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,WAAO;AAAA,EACT;AACA,MAAI,KAAK,IAAI,KAAK,GAAG;AACnB,WAAO;AAAA,EACT;AACA,OAAK,IAAI,KAAK;AACd,SAAO,OAAO,KAAK;AACnB,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,eAAW,MAAM,GAAG,GAAG,IAAI;AAAA,EAC7B;AACA,SAAO;AACT;AAEA,SAASO,uBAAsB,OAAO;AACpC,QAAM,iBAAiB,eAAe,KAAK;AAC3C,MAAI,OAAO,oBAAoB,YAAY;AACzC,WAAO,gBAAgB,cAAc;AAAA,EACvC;AACA,SAAO,KAAK,MAAM,KAAK,UAAU,cAAc,CAAC;AAClD;AAEA,SAAS,gBAAgB,OAAO;AAC9B,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,SAAO,WAAWA,uBAAsB,KAAK,CAAC;AAChD;AAEA,SAAS,sBAAsB,UAAU;AACvC,MAAI,OAAO,aAAa,eAAe,OAAO,aAAa;AAAY;AACvE,MAAI,SAAS,MAAM;AACjB,aAAS;AACT;AAAA,EACF;AAEA,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,SAAS;AAAM;AACpB,aAAS,oBAAoB,oBAAoB,OAAO;AACxD,aAAS;AAAA,EACX;AAEA,WAAS,iBAAiB,oBAAoB,SAAS,EAAE,MAAM,KAAK,CAAC;AACvE;AAEA,SAAS,cAAc,UAAU,CAAC,GAAG;AACnC,QAAM,cAAc,SAAS,gBAAgB;AAC7C,MAAI,OAAO,aAAa;AAAa;AACrC,wBAAsB,MAAM;AAC1B,QAAI,CAAC,SAAS,cAAc,eAAe,GAAG;AAC5C,YAAM,aAAa,SAAS,cAAc,eAAe;AACzD,UAAI,CAAC,aAAa;AAChB,mBAAW,aAAa,+BAA+B,MAAM;AAAA,MAC/D;AACA,eAAS,KAAK,YAAY,UAAU;AAAA,IACtC,WAAW,CAAC,aAAa;AACvB,YAAM,WAAW,SAAS,cAAc,eAAe;AACvD,UAAI,UAAU;AACZ,iBAAS,aAAa,+BAA+B,MAAM;AAAA,MAC7D;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,QAAQ,KAAK,GAAG;AACvB,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,KAAK,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;AAAA,EAClD,CAAC;AACH;AAEA,eAAe,uBAAuB,UAAU,CAAC,GAAG;AAClD,QAAM,iBAAiB,SAAS,mBAAmB;AACnD,QAAM,cAAc,SAAS,gBAAgB;AAC7C,QAAM,iBACJ,OAAO,SAAS,mBAAmB,YAAY,QAAQ,eAAe,KAAK,IACvE,QAAQ,eAAe,KAAK,IAC5B;AACN,QAAM,YAAY,OAAO,SAAS,OAAO,SAAS,SAAS,CAAC,IACxD,OAAO,QAAQ,SAAS,IACxB;AAEJ,MAAI,OAAO,aAAa;AAAa,WAAO;AAC5C,MAAI,CAAC,kBAAkB,CAAC,SAAS,cAAc,eAAe,GAAG;AAC/D,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB;AAClB,kBAAc,EAAE,YAAY,CAAC;AAAA,EAC/B;AAEA,QAAM,YAAY,KAAK,IAAI;AAC3B,SAAO,KAAK,IAAI,IAAI,YAAY,WAAW;AACzC,UAAM,aAAa,SAAS,cAAc,eAAe;AACzD,QAAI,CAAC,YAAY;AACf,YAAM,QAAQ,EAAE;AAChB;AAAA,IACF;AAEA,QAAI,OAAO,aAAa,cAAc,MAAM,YAAY;AACtD,aAAO;AAAA,IACT;AAEA,QACE,OAAO,mBAAmB,eAC1B,OAAO,eAAe,gBAAgB,YACtC;AACA,UAAI;AACF,cAAM,QAAQ,KAAK,CAAC,eAAe,YAAY,eAAe,GAAG,QAAQ,EAAE,CAAC,CAAC;AAAA,MAC/E,SAAS,OAAO;AACd,cAAM,QAAQ,EAAE;AAAA,MAClB;AACA;AAAA,IACF;AAEA,UAAM,QAAQ,EAAE;AAAA,EAClB;AAEA,QAAM,WAAW,SAAS,cAAc,eAAe;AACvD,MAAI,YAAY,OAAO,WAAW,cAAc,MAAM,YAAY;AAChE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB;AACzB,MAAI,OAAO,aAAa;AAAa;AACrC,QAAM,UAAU,SAAS,iBAAiB,eAAe;AACzD,UAAQ,QAAQ,CAAC,WAAW;AAC1B,QAAI,OAAO,QAAQ,iCAAiC,YAAY;AAC9D,aAAO,6BAA6B,KAAK;AAAA,IAC3C;AACA,WAAO,OAAO;AAAA,EAChB,CAAC;AACH;AAEA,SAAS,4BAA4B,YAAY;AAC/C,MAAI,CAAC;AAAY,WAAO;AACxB,MAAI,OAAO,WAAW,gCAAgC,YAAY;AAChE,WAAO,QAAQ,WAAW,4BAA4B,CAAC;AAAA,EACzD;AACA,SAAO;AACT;AAEA,SAAS,6BAA6B;AACpC,MAAI,OAAO,aAAa;AAAa;AACrC,MAAI,SAAS,eAAe,yBAAyB;AAAG;AAExD,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,KAAK;AACX,QAAM;AAAA,EAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4D3B,WAAS,KAAK,YAAY,KAAK;AACjC;AAEA,SAAS,0BAA0B,QAAQ,WAAW;AACpD,MAAI,CAAC;AAAQ;AAEb,SAAO,UAAU,OAAO,eAAe,SAAS;AAChD,SAAO,UAAU,OAAO,iBAAiB,CAAC,SAAS;AACnD,SAAO,aAAa,gBAAgB,YAAY,SAAS,OAAO;AAEhE,QAAM,QAAQ;AACd,SAAO,aAAa,cAAc,KAAK;AACvC,SAAO,aAAa,SAAS,KAAK;AACpC;AAEA,eAAe,6BAA6B;AAC1C,MAAI,OAAO,aAAa;AAAa,WAAO;AAE5C,6BAA2B;AAE3B,MAAI,SAAS,SAAS,eAAe,mBAAmB;AACxD,MAAI,CAAC,QAAQ;AACX,UAAM,MAAM,SAAS,cAAc,KAAK;AACxC,QAAI,YAAY;AAChB,QAAI,aAAa,iBAAiB,EAAE;AACpC,QAAI,aAAa,aAAa,MAAM;AACpC,QAAI,aAAa,6BAA6B,MAAM;AAEpD,aAAS,SAAS,cAAc,QAAQ;AACxC,WAAO,KAAK;AACZ,WAAO,OAAO;AACd,WAAO,YAAY;AACnB,WAAO,aAAa,6BAA6B,MAAM;AACvD,WAAO,YAAY;AAEnB,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,aAAa,6BAA6B,MAAM;AAErD,UAAM,aAAa,CAAC,QAAQ,OAAO,SAAS;AAC1C,YAAM,KAAK,SAAS,cAAc,IAAI;AACtC,YAAM,OAAO,SAAS,cAAc,GAAG;AACvC,WAAK,OAAO;AACZ,WAAK,QAAQ,gBAAgB;AAC7B,WAAK,aAAa,6BAA6B,MAAM;AAErD,YAAM,SAAS,SAAS,cAAc,UAAU;AAChD,aAAO,aAAa,QAAQ,IAAI;AAChC,aAAO,aAAa,QAAQ,IAAI;AAEhC,WAAK,OAAO,QAAQ,SAAS,eAAe,IAAI,KAAK,EAAE,CAAC;AACxD,SAAG,YAAY,IAAI;AACnB,aAAO;AAAA,IACT;AAEA,UAAM,kBAAkB,MAAM;AAC5B,YAAM,KAAK,SAAS,cAAc,IAAI;AACtC,SAAG,aAAa,6BAA6B,MAAM;AACnD,YAAM,KAAK,SAAS,cAAc,IAAI;AACtC,SAAG,aAAa,eAAe,MAAM;AACrC,SAAG,YAAY,EAAE;AACjB,aAAO;AAAA,IACT;AAEA,SAAK,YAAY,WAAW,UAAU,IAAI,qBAAqB,GAAG,QAAQ,CAAC;AAE3E,UAAM,eAAe,WAAW,iBAAiB,IAAI,eAAe,GAAG,MAAM;AAC7E,iBAAa,aAAa,uBAAuB,EAAE;AAEnD,SAAK,YAAY,YAAY;AAE7B,SAAK,YAAY,WAAW,gBAAgB,IAAI,cAAc,GAAG,yBAAyB,CAAC;AAE3F,UAAM,oCAAoC,IAAI;AAE9C,QAAI,OAAO,QAAQ,IAAI;AAEvB,0BAAsB,MAAM;AAC1B,UAAI,CAAC,SAAS,eAAe,mBAAmB,GAAG;AACjD,iBAAS,KAAK,YAAY,GAAG;AAAA,MAC/B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,eAAe,oCAAoC,MAAM;AACvD,MAAI,EAAE,gBAAgB;AAAU;AAChC,MAAI,KAAK,iCAAiC;AACxC,WAAO,KAAK;AAAA,EACd;AAEA,OAAK,mCAAmC,YAAY;AACpD,SACG,iBAAiB,oCAAoC,EACrD,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC;AAElC,UAAM,aAAa,MAAM,uBAAuB;AAAA,MAC9C,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,WAAW;AAAA,IACb,CAAC;AAED,QAAI,CAAC,cAAc,OAAO,WAAW,kCAAkC,YAAY;AACjF;AAAA,IACF;AAEA,UAAM,aAAa,MAAM,WAAW,8BAA8B;AAClE,QAAI,EAAE,sBAAsB;AAAU;AAEtC,eAAW,UAAU,IAAI,iCAAiC;AAE1D,UAAM,YAAY,KAAK,cAAc,wCAAwC;AAC7E,UAAM,YAAY,WAAW,QAAQ,IAAI,KAAK;AAC9C,UAAM,eAAe,WAAW,0BAA0B;AAC1D,UAAM,uBACJ,gBAAgB,aAAa,gBAAgB,aAAa,IAAI,eAAe;AAE/E,QAAI,sBAAsB;AACxB,WAAK,aAAa,YAAY,oBAAoB;AAClD;AAAA,IACF;AAEA,QAAI,WAAW;AACb,WAAK,aAAa,YAAY,SAAS;AACvC;AAAA,IACF;AAEA,SAAK,YAAY,UAAU;AAAA,EAC3B,GAAG;AAEH,MAAI;AACF,UAAM,KAAK;AAAA,EACb,UAAE;AACA,SAAK,kCAAkC;AAAA,EACzC;AACF;AAEA,SAAS,yBAAyB;AAChC,MAAI,OAAO,aAAa;AAAa;AACrC,QAAM,SAAS,SAAS,eAAe,mBAAmB;AAC1D,MAAI,QAAQ;AACV,UAAM,MAAM,OAAO,QAAQ,2BAA2B;AACtD,QAAI,KAAK;AACP,UAAI,OAAO;AAAA,IACb,OAAO;AACL,aAAO,OAAO;AAAA,IAChB;AAAA,EACF;AACA,QAAM,QAAQ,SAAS,eAAe,yBAAyB;AAC/D,MAAI;AAAO,UAAM,OAAO;AACxB,kBAAgB;AAClB;AAEA,eAAe,2BAA2B;AACxC,MAAI,OAAO,aAAa;AAAa;AACrC,QAAM,eAAe,MAAM,2BAA2B;AACtD,MAAI,CAAC;AAAc;AAEnB,QAAM,qBAAqB,OAAO,YAAY;AAC5C,QAAI,SAAS;AACX,YAAM,aAAa,MAAM,uBAAuB,EAAE,gBAAgB,KAAK,CAAC;AACxE,UAAI,cAAc,OAAO,WAAW,iCAAiC,YAAY;AAC/E,mBAAW,6BAA6B,IAAI;AAAA,MAC9C;AAAA,IACF,OAAO;AACL,sBAAgB;AAAA,IAClB;AACA,8BAA0B,cAAc,OAAO;AAAA,EACjD;AAEA,OAAK,mBAAmB,KAAK;AAE7B,QAAM,aAAa,aAAa,QAAQ,2BAA2B,KAAK;AACxE,MAAI,aAAa,4BAA4B;AAC3C,eAAW,oBAAoB,SAAS,aAAa,0BAA0B;AAAA,EACjF;AAEA,QAAM,gBAAgB,OAAO,UAAU;AACrC,UAAM,gBAAgB,MAAM,QAAQ,UAAU,wBAAwB;AACtE,QAAI,CAAC;AAAe;AAEpB,UAAM,eAAe;AACrB,UAAM,SAAS,OAAO,cAAc,QAAQ,iBAAiB,EAAE;AAE/D,QAAI,WAAW,UAAU;AACvB,YAAM,aAAa,MAAM,uBAAuB,EAAE,gBAAgB,MAAM,CAAC;AACzE,YAAM,YAAY,4BAA4B,UAAU;AACxD,YAAM,mBAAmB,CAAC,SAAS;AACnC;AAAA,IACF;AAEA,QAAI,WAAW,iBAAiB;AAC9B,YAAM,aAAa,MAAM,uBAAuB;AAAA,QAC9C,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AACD,UAAI,cAAc,OAAO,WAAW,iCAAiC,YAAY;AAC/E,mBAAW,6BAA6B,KAAK;AAAA,MAC/C;AACA,UAAI,cAAc,OAAO,WAAW,uBAAuB,YAAY;AACrE,kCAA0B,cAAc,KAAK;AAC7C,cAAM,WAAW,mBAAmB;AAAA,MACtC;AACA;AAAA,IACF;AAEA,QAAI,WAAW,gBAAgB;AAC7B,YAAM,aAAa,MAAM,uBAAuB;AAAA,QAC9C,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AACD,gCAA0B,cAAc,KAAK;AAC7C,UAAI,cAAc,OAAO,WAAW,gBAAgB,YAAY;AAC9D,cAAM,WAAW,YAAY;AAAA,MAC/B;AACA;AAAA,IACF;AAAA,EACF;AAEA,eAAa,6BAA6B;AAC1C,aAAW,iBAAiB,SAAS,aAAa;AAElD,MAAI,aAAa,6BAA6B;AAC5C,aAAS,oBAAoB,yBAAyB,aAAa,2BAA2B;AAAA,EAChG;AACA,MAAI,aAAa,4BAA4B;AAC3C,aAAS,oBAAoB,wBAAwB,aAAa,0BAA0B;AAAA,EAC9F;AAEA,QAAM,iBAAiB,MAAM;AAC3B,SAAK,mBAAmB,KAAK;AAAA,EAC/B;AAEA,QAAM,gBAAgB,MAAM;AAC1B,SAAK,mBAAmB,IAAI;AAAA,EAC9B;AAEA,eAAa,8BAA8B;AAC3C,WAAS,iBAAiB,yBAAyB,cAAc;AACjE,eAAa,6BAA6B;AAC1C,WAAS,iBAAiB,wBAAwB,aAAa;AACjE;AAEA,SAAS,sBAAsB;AAC7B,MAAI,OAAO,WAAW,eAAe,CAAC,OAAO;AAAc,WAAO;AAClE,MAAI;AACF,UAAM,MAAM,OAAO,aAAa,QAAQ,gBAAgB;AACxD,QAAI,CAAC;AAAK,aAAO;AACjB,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,QAAI,WAAW,YAAY,UAAU,YAAY;AAAS,aAAO;AAAA,EACnE,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG;AACjD,MAAI,CAAC,UAAU,OAAO,WAAW;AAAU,WAAO;AAClD,QAAM,MAAM,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,OAAO;AAC9D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAI,GAAG,IAAI;AAAA,QACT,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,MAAM,WAAW,IAAI,GAAG,IAAI,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAI,GAAG,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,2BAA2B,YAAY;AAC9C,QAAM,SAAS,oBAAoB;AACnC,MAAI,CAAC,UAAU,CAAC,cAAc,OAAO,eAAe;AAAU,WAAO;AAErE,QAAM,eAAe,OAAO;AAC5B,QAAM,eACJ,OAAO,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAEvE,MAAI,CAAC,gBAAgB,CAAC;AAAc,WAAO;AAE3C,QAAM,cACJ,YAAY,cAAc,YAAY,cAAc,eAAe;AAErE,MAAI,aAAa,EAAE,GAAG,WAAW;AAEjC,MAAI,cAAc;AAChB,eAAW,SAAS;AAAA,EACtB;AAEA,MAAI,cAAc;AAChB,QAAI,aAAa;AACf,YAAM,aACJ,WAAW,UAAU,OAAO,WAAW,WAAW,WAC9C,WAAW,SACX,CAAC;AACP,iBAAW,SAAS,gBAAgB,YAAY,YAAY;AAAA,IAC9D,OAAO;AACL,mBAAa,gBAAgB,YAAY,YAAY;AAAA,IACvD;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,2BAA2BC,MAAK,UAAU,CAAC,GAAG;AACrD,QAAM;AAAA,IACJ,eAAe;AAAA,IACf,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,CAAC;AAEhB,QAAM,gBAAgB,uBAAuB,SAASA,MAAK,KAAK;AAEhE,QAAM,qBAAqB,CAAC,SAAS;AACnC,UAAM,SAAS,eAAe,MAAM,EAAE;AACtC,UAAM,SAAS,QAAQ,UAAU,CAAC;AAClC,UAAM,UAAU,QAAQ;AACxB,UAAM,YAAY,QAAQ;AAC1B,UAAM,SAAS,QAAQ;AAEvB,QAAI,WAAW,aAAa,QAAQ;AAClC,aAAO;AAAA,oFACuE,OAAO;AAAA,oFACP,SAAS;AAAA,oFACT,MAAM;AAAA;AAAA,IAEtF;AAEA,QAAI,MAAM,MAAM;AACd,aAAO,mBAAmB,KAAK,IAAI;AAAA,IACrC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,MAAM;AAC7B,UAAM,SAASA,MAAK,WAAW,CAAC;AAChC,WAAO,OAAO,OAAO,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW;AACpD,YAAM,WAAW,QAAQ,MAAM,QAAQ;AACvC,aAAO,QAAQ,QAAQ;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiB,CAAC,aAAa;AACnC,QAAI,CAAC;AAAU,aAAO;AACtB,UAAM,UAAU,iBAAiB;AACjC,WACE,QAAQ,KAAK,CAAC,WAAW,OAAO,QAAQ,MAAM,QAAQ,IAAI,MAAM,OAAO,QAAQ,CAAC,KAChF;AAAA,EAEJ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,aACE,OAAO,gBAAgB,aAAa,cAAc;AAAA,IACpD,YAAY;AAAA,MACV,CAAC,YAAY,GAAG;AAAA,QACd,SAAS,MAAM;AAAA,QACf,UAAU,CAAC,UAAU,CAAC,MAAM;AAC1B,gBAAM,QAAQ,OAAO,SAAS,UAAU,EAAE,EAAE,YAAY,EAAE,KAAK;AAC/D,gBAAM,UAAU,iBAAiB;AAEjC,iBAAO,QACJ,OAAO,CAAC,WAAW;AAClB,kBAAM,OAAO,OAAO,QAAQ,QAAQ,QAAQ,MAAM,EAAE,EAAE,YAAY;AAClE,kBAAM,cAAc,OAAO,QAAQ,eAAe,EAAE,EAAE,YAAY;AAClE,kBAAM,OAAO,MAAM,QAAQ,QAAQ,IAAI,IACnC,OAAO,KAAK,IAAI,CAAC,QAAQ,OAAO,GAAG,EAAE,YAAY,CAAC,IAClD,CAAC;AAEL,gBAAI,OAAO;AACT,oBAAM,eACJ,KAAK,SAAS,KAAK,KACnB,YAAY,SAAS,KAAK,KAC1B,KAAK,KAAK,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC;AACxC,kBAAI,CAAC;AAAc,uBAAO;AAAA,YAC5B;AAEA,kBAAM,aAAa,wBAAwB,QAAQ,aAAa;AAChE,gBAAI,CAAC,uBAAuB,CAAC;AAAY,qBAAO;AAChD,mBAAO;AAAA,UACT,CAAC,EACA,IAAI,CAAC,WAAW;AACf,kBAAM,WAAW,QAAQ,MAAM,QAAQ;AACvC,kBAAM,aAAa,wBAAwB,QAAQ,aAAa;AAChE,kBAAM,kBAAkB,sBAAsB,MAAM;AACpD,kBAAM,YACJ,gBAAgB,WAAW,IACvB,GAAG,gBAAgB,CAAC,CAAC,UACrB,oBAAoB,aAAa;AACvC,kBAAM,kBAAkB,OAAO,QAAQ,eAAe,EAAE,EAAE,KAAK;AAC/D,kBAAM,cAAc,aAChB,kBACA,kBACE,GAAG,eAAe,MAAM,SAAS,KACjC;AAEN,mBAAO;AAAA,cACL,IAAI;AAAA,cACJ,MAAM,QAAQ,QAAQ,OAAO,QAAQ;AAAA,cACrC;AAAA,cACA,MAAM;AAAA,cACN,OACE,CAAC,cAAc,sBAAsB,aAAa;AAAA,cACpD,UAAU,CAAC,cAAc;AAAA,cACzB,SAAS,CAAC,aAAa,YAAY;AAAA,YACrC;AAAA,UACF,CAAC,EACA;AAAA,YAAK,CAAC,GAAG,MACR,OAAO,EAAE,QAAQ,EAAE,EAAE,cAAc,OAAO,EAAE,QAAQ,EAAE,CAAC;AAAA,UACzD;AAAA,QACJ;AAAA,QACA,QAAQ,OAAO,cAAc;AAC3B,cAAI,CAAC,WAAW;AAAI,mBAAO,WAAW;AACtC,cAAI,WAAW;AAAU,mBAAO,WAAW;AAE3C,gBAAM,SAAS,eAAe,UAAU,EAAE;AAC1C,cAAI,CAAC;AAAQ,mBAAO,WAAW;AAE/B,cAAI,OAAO,aAAa,YAAY;AAClC,mBAAO,MAAM,SAAS,EAAE,QAAQ,WAAW,cAAc,CAAC;AAAA,UAC5D;AAEA,cAAI,OAAOA,MAAK,oBAAoB,YAAY;AAC9C,kBAAMA,KAAI,gBAAgB,OAAO,MAAM,UAAU,EAAE;AAAA,UACrD;AAEA,iBAAO,OAAO,MAAM,UAAU;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,iBAAiBA,MAAK,EAAE,oBAAoB,6BAA6B,kBAAkB,GAAG;AAC3G,MAAI;AAAgB;AAEpB,QAAM,CAAC,gBAAgB,aAAa,YAAY,IAC9C,MAAM,QAAQ,IAAI;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAEH,QAAMC,YAAW,gBAAgB,WAAW,gBAAgB;AAC5D,QAAMC,2BAA0B,gBAAgB;AAChD,QAAMC,SAAQ,aAAa;AAG3B,EAAAH,KAAI,WAAWC;AACf,EAAAD,KAAI,0BAA0BE;AAC9B,EAAAF,KAAI,QAAQG;AACZ,EAAAH,KAAI,SAAS,gBAAgB,CAAC;AAC9B,EAAAA,KAAI,UAAU;AACd,EAAAA,KAAI,kBAAkB;AACtB,EAAAA,KAAI,aAAa;AACjB,EAAAA,KAAI,uBAAuB;AAC3B,EAAAA,KAAI,mBAAmB;AACvB,EAAAA,KAAI,wBAAwB;AAC5B,EAAAA,KAAI,0BAA0B;AAC9B,EAAAA,KAAI,mBAAmB;AACvB,MAAI,CAAC,MAAM,QAAQA,KAAI,gBAAgB,KAAKA,KAAI,iBAAiB,WAAW,GAAG;AAC7E,IAAAA,KAAI,mBAAmB,MAAM,QAAQ,mBAAmB,IACpD,sBACA,CAAC;AAAA,EACP;AACA,EAAAA,KAAI,cAAc,SAAS,WAAW;AACpC,UAAM,kBAAkB,aAAa,UAAU;AAC/C,gBAAY,eAAe;AAC3B,QAAI,OAAO,sBAAsB,YAAY;AAC3C,wBAAkB;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AACA,EAAAA,KAAI,cAAc,SAAS,YAAY,QAAQ,kBAAkB;AAC/D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AACA,EAAAA,KAAI,kBAAkB,SAAS,YAAY,kBAAkB;AAC3D,WAAO,gBAAgB,YAAY,kBAAkB,UAAU,QAAQ;AAAA,EACzE;AACA,EAAAA,KAAI,eAAe,iBAAiB;AAClC,WAAO;AAAA,EACT;AACA,EAAAA,KAAI,6BAA6B,SAAS,UAAU,CAAC,GAAG;AACtD,WAAO,2BAA2BA,MAAK,OAAO;AAAA,EAChD;AAEA,EAAAA,KAAI,kBAAkB,eAAe,UAAU,UAAU,CAAC,GAAG;AAC3D,QAAI,CAAC;AAAU,aAAO;AACtB,QAAI,CAACA,KAAI,UAAU,QAAQ;AACzB,MAAAA,KAAI,IAAI,QAAQ,qDAAqD;AACrE,aAAO;AAAA,IACT;AAEA,UAAM,aAAaA,KAAI,iBAAiB,CAAC;AACzC,UAAM,EAAE,QAAQ,SAAS,QAAQ,SAAS,GAAG,KAAK,IAAI;AACtD,UAAM,cAAc;AAAA,MAClB,GAAGD,uBAAsB,IAAI;AAAA,MAC7B,QAAQ;AAAA,IACV;AAEA,UAAM,aAAa,oBAAoB,aAAa,CAAC,GAAG;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,gBAAgB,uBAAuBC,KAAI,KAAK;AACtD,QAAI,CAAC,wBAAwB,WAAW,gBAAgB,QAAQ,aAAa,GAAG;AAC9E,YAAM,aACJ,WAAW,YAAY,QACvB,WAAW,iBAAiB,QAAQ,QACpC;AACF,MAAAA,KAAI;AAAA,QACF;AAAA,QACA,cAAc,aAAa,8BAA8B,UAAU;AAAA,MACrE;AAAA,IACF;AAEA,QAAI,WAAW,SAAS,CAAC,WAAW,gBAAgB,OAAO;AACzD,iBAAW,gBAAgB,QAAQ,WAAW;AAAA,IAChD;AAEA,UAAM,YAAY,IAAI,UAAU,WAAW,eAAe;AAE1D,QAAI,WAAW,gBAAgB,QAAQ,YAAY;AACjD,UAAI;AACF,cAAM,oBAAoB,WAAW,gBAAgB,OAAO,UAAU;AAAA,MACxE,SAAS,OAAO;AACd,mBAAW,iBAAiB;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAAA,KAAI,cAAc,SAAS;AAE3B,UAAM,aAAa,WAAW,cAAc,EAAE,IAAI,UAAU,MAAM,SAAS;AAC3E,IAAAA,KAAI,gBAAgB;AACpB,IAAAA,KAAI,WAAW,gBAAgB;AAAA,MAC7B,GAAG;AAAA,MACH,QAAQ,WAAW,gBAAgB;AAAA,MACnC,QAAQ,WAAW,gBAAgB;AAAA,MACnC,OAAO,WAAW,gBAAgB,SAAS,WAAW;AAAA,IACxD,CAAC;AACD,IAAAA,KAAI,uBAAuB;AAAA,MACzB,WAAW,gBAAgB;AAAA,IAC7B;AACA,IAAAA,KAAI,mBAAmB;AAAA,MACrB,WAAW,gBAAgB;AAAA,IAC7B;AAEA,UAAM,UAAU,SAAS,YAAY;AACrC,QAAI,WAAW,OAAO,WAAW,aAAa;AAC5C,YAAM,aAAa;AACnB,UAAI;AACF,cAAM,YAAY,aAAa,QAAQ,UAAU;AACjD,cAAM,eAAe,YAAY,KAAK,MAAM,SAAS,IAAI;AACzD,cAAM,aAAa;AAAA,UACjB,GAAI,gBAAgB,OAAO,iBAAiB,WACxC,eACA,CAAC;AAAA,UACL,QAAQ,WAAW,MAAM;AAAA,UACzB,QAAQD,uBAAsB,WAAW,gBAAgB,UAAU,CAAC,CAAC;AAAA,QACvE;AACA,qBAAa,QAAQ,YAAY,KAAK,UAAU,UAAU,CAAC;AAAA,MAC7D,SAAS,OAAO;AACd,mBAAW,iBAAiB;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAGA,EAAAC,KAAI,kBAAkB,SAAS,QAAQ,UAAU,CAAC,GAAG;AACnD,QAAI,OAAO,WAAW,eAAe,CAAC,SAAS,QAAQ,CAAC,QAAQ;AAC9D;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,SAAS,CAAC,QAAQ,EAAE,IAAI;AAEvC,QAAI;AACF,UAAI,gBAAgB,SAAS;AAC7B,UAAI,UAAU,YAAY,CAAC,OAAO;AAChC,cAAM,cACJ,OAAO,cACP,OAAO,WAAW,8BAA8B,EAAE;AACpD,wBAAgB,cAAc,SAAS;AAAA,MACzC;AAEA,eAAS,gBAAgB,aAAa,cAAc,aAAa;AAEjE,YAAM,aAAa,OAAO,SACtB,EAAE,GAAG,QAAQ,OAAO,cAAc,IAClC,EAAE,QAAQ,QAAQ,OAAO,cAAc;AAC3C,YAAM,gBAAgB,IAAI,UAAU,UAAU;AAE9C,YAAM,cAAc,OACjB,IAAI,CAAC,UAAU;AACd,YAAI;AACF,iBAAO,cAAc,MAAM,KAAK,KAAK;AAAA,QACvC,SAAS,GAAG;AACV,iBAAO;AAAA,QACT;AAAA,MACF,CAAC,EACA,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,EAC1B,KAAK,IAAI;AAEZ,UAAI,aAAa;AACf,cAAM,WAAW,SAAS,KAAK,cAAc,yBAAyB;AACtE,YAAI;AAAU,mBAAS,OAAO;AAE9B,cAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,gBAAQ,aAAa,oBAAoB,EAAE;AAC3C,gBAAQ,cAAc;AACtB,iBAAS,KAAK,aAAa,SAAS,SAAS,KAAK,UAAU;AAAA,MAC9D;AAAA,IACF,SAAS,OAAO;AACd,MAAAA,KAAI,IAAI,QAAQ,uBAAuB,KAAK;AAAA,IAC9C;AAAA,EACF;AAEA,mBAAiB;AACnB;AAGA,eAAsB,UAAUA,MAAK,QAAQ,EAAE,WAAW,mBAAmB,oBAAoB,4BAA4B,GAAG;AAC9H,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,2BACJ,QAAQ,QAAQ,OAAO,gBACvB,QAAQ,OAAO,gBACf;AAEF,WAAS,2BAA2B,MAAM;AAE1C,MAAI,OAAO,6BAA6B,YAAY,yBAAyB,KAAK,GAAG;AACnF,UAAM,aACJ,QAAQ,UAAU,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS,CAAC;AACzE,UAAM,YACJ,YAAY,SAAS,OAAO,WAAW,UAAU,WAC7C,WAAW,QACX,CAAC;AAEP,aAAS;AAAA,MACP,GAAG;AAAA,MACH,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,UACL,GAAG;AAAA,UACH,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,QAAM,iBAAiBA,MAAK,EAAE,oBAAoB,6BAA6B,kBAAkB,CAAC;AAClG,qBAAmBA,IAAG;AAGtB,MAAI,OAAO,aAAa,eAAe,SAAS,oBAAoB;AAClE,UAAM;AAAA;AAAA,MAAa;AAAA;AAAA;AAAA;AAAA;AAInB,QAAI;AACF,YAAM,eAAe,SAAS,mBAAmB,KAAK,CAAC,UAAU,MAAM,QAAQ;AAC/E,UAAI,CAAC,cAAc;AACjB,cAAM,YAAY,IAAI,cAAc;AACpC,kBAAU,YAAY,GAAG;AACzB,kBAAU,WAAW;AACrB,iBAAS,qBAAqB,CAAC,WAAW,GAAG,SAAS,kBAAkB;AAAA,MAC1E;AAAA,IACF,SAAS,GAAG;AACV,MAAAA,KAAI,IAAI,QAAQ,wEAAwE,CAAC;AACzF,YAAM,oBAAoB,SAAS,KAAK,cAAc,sBAAsB;AAC5E,UAAI,CAAC,mBAAmB;AACtB,cAAM,YAAY,SAAS,cAAc,OAAO;AAChD,kBAAU,aAAa,iBAAiB,EAAE;AAC1C,kBAAU,cAAc;AACxB,iBAAS,KAAK,aAAa,WAAW,SAAS,KAAK,UAAU;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AAGA,MAAI,oBAAoB,OAAO,qBAAqB;AACpD,MAAI,cAAc,OAAO,eAAe;AACxC,MAAI,kBAAkB,OAAO,mBAAmB;AAChD,MAAI,gBAAgB,OAAO,iBAAiB;AAC5C,MAAI,iBAAiB,OAAO,kBAAkB,CAAC,UAAU,YAAY;AAErE,QAAM,UAAW,UAAU,OAAO,cAAe;AAEjD,MAAI;AAEF,UAAM,EAAE,cAAc,IAAI,qBAAqB;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAGD,UAAM,aAAa,oBAAoB,QAAQ,CAAC,GAAG;AAAA,MACjD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,QAAI,eAAe,CAAC,wBAAwB,WAAW,gBAAgB,QAAQ,aAAa,GAAG;AAC7F,YAAM,aACJ,WAAW,YAAY,QACvB,WAAW,iBAAiB,QAAQ,QACpC,WAAW,iBAAiB,UAC5B;AACF,MAAAA,KAAI;AAAA,QACF;AAAA,QACA,cAAc,aAAa,8BAA8B,UAAU;AAAA,MACrE;AAAA,IACF;AACA,UAAM,gBAAgB,WAAW;AACjC,UAAM,EAAE,KAAK,OAAO,GAAG,cAAc,IAAI,WAAW;AACpD,UAAM,kBAAkBD,uBAAsB,aAAa;AAC3D,oBAAgB,MAAM;AACtB,QAAI,aAAa;AACf,sBAAgB,QAAQ;AAAA,IAC1B;AAEA,UAAM,YAAY,IAAI,UAAU,eAAe;AAG/C,QAAI,gBAAgB,QAAQ,YAAY;AACtC,UAAI;AACF,cAAM,oBAAoB,gBAAgB,OAAO,UAAU;AAAA,MAC7D,SAAS,IAAI;AACX,yBAAiB,MAAM,QAAQ,gDAAgD,EAAE;AAAA,MACnF;AAAA,IACF;AAGA,QAAI,iBAAiB,OAAO,WAAW,eAAe,SAAS,MAAM;AACnE,UAAI;AACF,cAAM,cAAc,eACjB,IAAI,CAAC,UAAU;AACd,cAAI;AACF,mBAAO,UAAU,MAAM,KAAK,KAAK;AAAA,UACnC,SAAS,GAAG;AACV,6BAAiB;AAAA,cACf;AAAA,cACA,8CAA8C,KAAK;AAAA,cACnD;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC,EACA,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,EAC1B,KAAK,IAAI;AAEZ,YAAI,aAAa;AACf,gBAAM,mBAAmB,SAAS,KAAK;AAAA,YACrC;AAAA,UACF;AACA,cAAI,kBAAkB;AACpB,6BAAiB,OAAO;AAAA,UAC1B;AAEA,gBAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,kBAAQ,aAAa,qBAAqB,EAAE;AAC5C,kBAAQ,cAAc;AAEtB,gBAAM,cAAc,SAAS,KAAK;AAAA,YAChC;AAAA,UACF;AACA,cAAI,aAAa;AACf,wBAAY,WAAW;AAAA,cACrB;AAAA,cACA,YAAY;AAAA,YACd;AAAA,UACF,OAAO;AACL,qBAAS,KAAK,aAAa,SAAS,SAAS,KAAK,UAAU;AAAA,UAC9D;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,yBAAiB,MAAM,QAAQ,sCAAsC,KAAK;AAAA,MAC5E;AAAA,IACF;AAGA,IAAAC,KAAI,SAAS,YAAY;AAGzB,QAAI,WAAW,YAAY,MAAM;AAC/B,uBAAiB,MAAM,OAAO,yBAAyB,WAAW,WAAW,IAAI,GAAG;AAAA,IACtF,OAAO;AACL,uBAAiB,MAAM,OAAO,6BAA6B;AAAA,IAC7D;AAGA,QAAI,mBAAmB;AACrB,MAAAA,KAAI,cAAc,UAAU,QAAQ;AAEpC,UAAI,OAAO,WAAW,aAAa;AACjC,mBAAW,MAAM;AACf,gBAAM,gBAAgB,SAAS,KAAK;AAAA,YAClC;AAAA,UACF;AACA,cAAI;AAAe,0BAAc,OAAO;AAExC,gBAAM,eAAe,SAAS,KAAK;AAAA,YACjC;AAAA,UACF;AACA,cAAI;AAAc,yBAAa,OAAO;AAEtC,gBAAM,gBAAgB,SAAS;AAAA,YAC7B;AAAA,UACF;AACA,cAAI;AAAe,0BAAc,OAAO;AAAA,QAC1C,GAAG,GAAG;AAAA,MACR;AAAA,IACF;AAEA,UAAM,eAAe,wBAAwB,QAAQ,EAAE,sBAAsB,CAAC;AAE9E,QAAI;AACJ,QAAI,WAAW,QAAQ,SAAS;AAC9B,iCAA2BI;AAAA,QACzB,uBAAuB,QAAQ,SAAS,EAAE,cAAc,MAAM,CAAC;AAAA,MACjE;AAAA,IACF,OAAO;AACL,iCAA2B,GAAG,YAAY;AAAA,IAC5C;AAGA,QAAI,cAAc;AAClB,QAAI,kBAAkB,CAAC;AAEvB,QAAI;AACF,YAAM,MAAM,MAAM,6BAA6B;AAAA,QAC7C,mBAAmB;AAAA,QACnB,mBACG,WAAW,MAAM,QAAQ,QAAQ,SAAS,KAAK,QAAQ,aACxD,CAAC;AAAA,QACH,kBACG,WAAW,OAAO,QAAQ,WAAW,cAAc,QAAQ,UAC5D;AAAA,QACF,WAAW;AAAA,QACX,qBAAqB,WAAW;AAAA,QAChC,wBAAwB,EAAE,WAAW,QAAQ;AAAA,MAC/C,GAAG,EAAE,eAAe,oBAAoB,CAAC;AACzC,oBAAc,IAAI;AAClB,wBAAkB,IAAI,mBAAmB,CAAC;AAAA,IAE5C,SAAS,OAAO;AACd,uBAAiB,MAAM,SAAS,sDAAiD,KAAK;AAAA,IACxF;AAEA,UAAM,iBAAiB,WAAW,WAAW;AAE7C,IAAAJ,KAAI,WAAW,gBAAgB;AAAA,MAC7B,MAAM;AAAA,MACN,GAAG;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,IACb,CAAC;AACD,IAAAA,KAAI,uBAAuB;AAAA,MACzB,WAAW,gBAAgB;AAAA,IAC7B;AACA,IAAAA,KAAI,mBAAmB;AAAA,MACrB,WAAW,gBAAgB;AAAA,IAC7B;AACA,QAAI,OAAO,sBAAsB,YAAY;AAC3C,wBAAkB;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ,WAAW,gBAAgB;AAAA,MACrC,CAAC;AAAA,IACH;AAEA,QAAI,OAAO,aAAa,aAAa;AACnC,UAAI;AACF,YAAI,QAAQ,UAAU;AACpB,qBAAW,MAAM;AACf,iBAAK,yBAAyB;AAAA,UAChC,GAAG,CAAC;AAAA,QACN,OAAO;AACL,iCAAuB;AAAA,QACzB;AAAA,MACF,SAAS,OAAO;AACd,yBAAiB,MAAM,QAAQ,uCAAuC,KAAK;AAAA,MAC7E;AAAA,IACF;AAEA,cAAU;AAAA,MACR,MAAM;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,MACR,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,IAAAA,KAAI,cAAc,IAAI,YAAY,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACrE,UAAM;AAAA,EACR;AACF;;;AC/qCA,IAAM,qBAAqB;AAE3B,SAAS,oBAAoB,OAAO;AAClC,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,SAAS,MAAM;AAAG,WAAO;AACrC,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC;AACxC;AAEA,SAAS,gBAAgB,QAAQ;AAC/B,MAAI,CAAC,MAAM,QAAQ,MAAM;AAAG,WAAO,CAAC;AACpC,SAAO,OACJ,IAAI,CAAC,UAAU;AACd,QAAI,CAAC;AAAO,aAAO;AACnB,UAAM,WAAW,OAAO,MAAM,YAAY,MAAM,EAAE,YAAY;AAC9D,WAAO;AAAA,MACL;AAAA,MACA,SAAS,OAAO,MAAM,WAAW,EAAE;AAAA,MACnC,MAAM,MAAM,OAAO,OAAO,MAAM,IAAI,IAAI;AAAA,IAC1C;AAAA,EACF,CAAC,EACA,OAAO,CAAC,UAAU,SAAS,MAAM,OAAO;AAC7C;AAEO,SAAS,mBAAmB,QAAQ,CAAC,GAAG;AAC7C,QAAM,SAAS,OAAO,MAAM,UAAU,SAAS;AAC/C,QAAM,OAAO,OAAO,MAAM,QAAQ,SAAS;AAC3C,QAAM,aAAa,oBAAoB,MAAM,UAAU;AACvD,QAAM,SAAS,gBAAgB,MAAM,MAAM;AAC3C,QAAM,cACJ,MAAM,eAAe,OAAO,MAAM,gBAAgB,WAC9C,MAAM,cACN,CAAC;AACP,QAAM,WACJ,MAAM,YAAY,OAAO,MAAM,aAAa,WAAW,MAAM,WAAW;AAE1E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,MAAM,QAAQ,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO,CAAC;AAAA,EACrE;AACF;AAEO,SAAS,eAAe,OAAO;AACpC,SAAO;AAAA,IACL,SACE,OAAO,UAAU,YACjB,YAAY,SACZ,UAAU,SACV,gBAAgB,SAChB,YAAY,SACZ,iBAAiB;AAAA,EACrB;AACF;;;ACtDA,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,mBAAmB,CAAC,UAAU,UAAU,OAAO,aAAa,gBAAgB;AAClF,IAAM,gCAAgC,CAAC,MAAM,MAAM,MAAM,UAAU,UAAU,OAAO,aAAa,gBAAgB;AAEjH,IAAI,eAAe;AAEnB,SAAS,gBAAgB;AACvB,SAAO,QAAQ,OAAO,YAAY,eAAe,SAAS,UAAU,IAAI;AAC1E;AAEA,SAAS,sBAAsB,WAAW,CAAC,GAAG;AAC5C,SAAO;AAAA,IACL,IAAI,OAAO,SAAS,MAAM,EAAE,EAAE,KAAK;AAAA,IACnC,MAAM,OAAO,SAAS,QAAQ,SAAS,MAAM,UAAU,EAAE,KAAK;AAAA,IAC9D,aAAa,OAAO,SAAS,eAAe,EAAE,EAAE,KAAK;AAAA,IACrD,MAAM,OAAO,SAAS,QAAQ,QAAQ,EAAE,KAAK;AAAA,IAC7C,MAAM,OAAO,SAAS,QAAQ,EAAE,EAAE,KAAK;AAAA,IACvC,MAAM,MAAM,QAAQ,SAAS,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,IAAI,CAAC;AAAA,EACpF;AACF;AAEA,SAAS,iBAAiB,UAAU,CAAC,GAAG,aAAa,CAAC,GAAG;AACvD,QAAM,eAAe,MAAM,QAAQ,OAAO,IACtC,UACA,MAAM,QAAQ,SAAS,SAAS,IAC9B,QAAQ,YACR,CAAC;AAEP,QAAM,YAAY,aACf,IAAI,qBAAqB,EACzB,OAAO,CAAC,SAAS,KAAK,MAAM,KAAK,IAAI;AAExC,SAAO;AAAA,IACL,SAAS,SAAS,WAAW;AAAA,IAC7B;AAAA,IACA,cAAc,WAAW,cAAc;AAAA,IACvC,mBAAmB,WAAW,mBAAmB;AAAA,EACnD;AACF;AAEA,eAAe,uBAAuB,UAAU,CAAC,GAAG;AAClD,QAAM,gBAAgB,QAAQ,cAAc,YAAY,KAAK,eAAe;AAC5E,QAAM,aAAa,CAAC,eAAe,sBAAsB,oBAAoB,EAAE,OAAO,OAAO;AAE7F,aAAW,aAAa,YAAY;AAClC,QAAI;AACF,YAAM,MAAM,IAAI,IAAI,WAAW,YAAY,GAAG,EAAE;AAChD,YAAM,WAAW,MAAM,MAAM,KAAK,EAAE,aAAa,cAAc,CAAC;AAChE,UAAI,CAAC,SAAS;AAAI;AAClB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,aAAO,iBAAiB,MAAM,EAAE,YAAY,IAAI,CAAC;AAAA,IACnD,SAAS,OAAO;AAAA,IAAC;AAAA,EACnB;AAEA,SAAO,iBAAiB,EAAE,WAAW,CAAC,EAAE,CAAC;AAC3C;AAEA,eAAe,oBAAoB,UAAU,CAAC,GAAG;AAC/C,QAAM,cAAc;AACpB,QAAM,gBAAgB;AACtB,QAAM,eAAe;AACrB,QAAM,CAAC,EAAE,SAAS,GAAG,MAAM,EAAE,cAAc,CAAC,IAAI,MAAM,QAAQ,IAAI;AAAA,IAChE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT,CAAC;AAED,QAAM,aAAa,CAAC;AACpB,MAAI,QAAQ,aAAa;AACvB,eAAW,KAAK,KAAK,QAAQ,QAAQ,WAAW,CAAC;AAAA,EACnD;AAEA,aAAW,KAAK,KAAK,QAAQ,QAAQ,IAAI,GAAG,GAAG,gBAAgB,CAAC;AAEhE,QAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAC7D,aAAW,KAAK,KAAK,QAAQ,WAAW,GAAG,6BAA6B,CAAC;AAEzE,aAAW,aAAa,YAAY;AAClC,QAAI;AACF,YAAM,MAAM,MAAM,SAAS,WAAW,MAAM;AAC5C,YAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,aAAO,iBAAiB,MAAM,EAAE,iBAAiB,UAAU,CAAC;AAAA,IAC9D,SAAS,OAAO;AAAA,IAAC;AAAA,EACnB;AAEA,SAAO,iBAAiB,EAAE,WAAW,CAAC,EAAE,CAAC;AAC3C;AAEA,eAAe,iBAAiB,UAAU,SAAS;AACjD,MAAI,CAAC,UAAU;AAAM,WAAO;AAE5B,MAAI,CAAC,cAAc,GAAG;AACpB,UAAM,UAAU,SAAS,gBAAgB;AACzC,UAAM,cAAc,IAAI,IAAI,SAAS,MAAM,OAAO,EAAE;AACpD,UAAM,WAAW,MAAM,MAAM,aAAa,EAAE,aAAa,cAAc,CAAC;AACxE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,4BAA4B,SAAS,IAAI,EAAE;AAAA,IAC7D;AACA,YAAQ,MAAM,SAAS,KAAK,GAAG,KAAK;AAAA,EACtC;AAEA,QAAM,cAAc;AACpB,QAAM,gBAAgB;AACtB,QAAM,CAAC,EAAE,SAAS,GAAG,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC7C,OAAO;AAAA,IACP,OAAO;AAAA,EACT,CAAC;AACD,QAAM,UAAU,SAAS,oBAAoB,KAAK,QAAQ,QAAQ,iBAAiB,IAAI,KAAK,QAAQ,QAAQ,IAAI,GAAG,UAAU,UAAU,OAAO,WAAW;AACzJ,QAAM,eAAe,KAAK,QAAQ,SAAS,SAAS,IAAI;AACxD,UAAQ,MAAM,SAAS,cAAc,MAAM,GAAG,KAAK;AACrD;AAEA,eAAsB,wBAAwB,UAAU,CAAC,GAAG;AAC1D,MAAI,gBAAgB,CAAC,QAAQ;AAAa,WAAO;AAEjD,iBAAe,cAAc,IACzB,MAAM,oBAAoB,OAAO,IACjC,MAAM,uBAAuB,OAAO;AAExC,SAAO;AACT;AAEA,eAAsB,kBAAkB,UAAU,CAAC,GAAG;AACpD,QAAM,UAAU,MAAM,wBAAwB,OAAO;AACrD,SAAO,QAAQ,UAAU,IAAI,CAAC,EAAE,IAAI,MAAM,aAAa,MAAM,MAAM,KAAK,OAAO;AAAA,IAC7E;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE;AACJ;AAEA,eAAsB,oBAAoB,YAAY,UAAU,CAAC,GAAG;AAClE,QAAM,UAAU,MAAM,wBAAwB,OAAO;AACrD,QAAM,WAAW,QAAQ,UAAU,KAAK,CAAC,SAAS,KAAK,OAAO,UAAU,KAAK;AAC7E,MAAI,CAAC;AAAU,WAAO;AAEtB,QAAM,OAAO,MAAM,iBAAiB,UAAU,OAAO;AACrD,SAAO,EAAE,GAAG,UAAU,KAAK;AAC7B;AAEA,eAAsB,0BAA0B,YAAY,UAAU,CAAC,GAAG;AACxE,QAAM,WAAW,MAAM,oBAAoB,YAAY,OAAO;AAC9D,MAAI,CAAC,UAAU;AACb,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ,CAAC,EAAE,UAAU,SAAS,SAAS,qBAAqB,UAAU,GAAG,CAAC;AAAA,IAC5E,CAAC;AAAA,EACH;AAEA,SAAO,mBAAmB;AAAA,IACxB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,UAAU;AAAA,MACR,IAAI,SAAS;AAAA,MACb,MAAM,SAAS;AAAA,MACf,MAAM,SAAS;AAAA,MACf,MAAM,SAAS;AAAA,MACf,aAAa,SAAS;AAAA,IACxB;AAAA,EACF,CAAC;AACH;;;ACzKA;AAAA,EACE,SAAW;AAAA,EACX,SAAW;AAAA,EACX,YAAc;AAAA,IACZ;AAAA,MACE,IAAM;AAAA,MACN,UAAY,CAAC,QAAQ,eAAe,aAAa;AAAA,MACjD,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,UAAY,CAAC,QAAQ,UAAU,WAAW,aAAa,MAAM;AAAA,MAC7D,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,UAAY,CAAC,SAAS,SAAS;AAAA,MAC/B,MAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,UAAY,CAAC,aAAa,SAAS;AAAA,MACnC,MAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,qBAAuB,CAAC,sBAAsB,oBAAoB;AAAA,EAClE,mBAAqB,CAAC,SAAS,SAAS,SAAS,SAAS,MAAM,MAAM,MAAM,WAAW,YAAY,KAAK;AAAA,EACxG,gBAAkB;AAAA,IAChB,EAAE,IAAM,oBAAoB,IAAM,QAAQ,KAAO,CAAC,MAAM,GAAG,MAAQ,OAAO;AAAA,IAC1E,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,MAAM,GAAG,MAAQ,OAAO;AAAA,IACnF,EAAE,IAAM,mBAAmB,IAAM,YAAY,KAAO,CAAC,UAAU,GAAG,MAAQ,OAAO;AAAA,IACjF,EAAE,IAAM,mBAAmB,IAAM,YAAY,KAAO,CAAC,UAAU,GAAG,MAAQ,OAAO;AAAA,IACjF,EAAE,IAAM,oBAAoB,IAAM,aAAa,KAAO,CAAC,WAAW,GAAG,MAAQ,OAAO;AAAA,IACpF,EAAE,IAAM,oBAAoB,IAAM,QAAQ,KAAO,CAAC,MAAM,GAAG,MAAQ,OAAO;AAAA,IAC1E,EAAE,IAAM,uBAAuB,IAAM,aAAa,KAAO,CAAC,MAAM,GAAG,MAAQ,OAAO;AAAA,IAClF,EAAE,IAAM,qBAAqB,IAAM,UAAU,KAAO,CAAC,MAAM,GAAG,MAAQ,OAAO;AAAA,IAC7E,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,aAAa,GAAG,MAAQ,OAAO;AAAA,IAC1F,EAAE,IAAM,uBAAuB,IAAM,gBAAgB,KAAO,CAAC,cAAc,GAAG,MAAQ,OAAO;AAAA,IAC7F,EAAE,IAAM,oBAAoB,IAAM,aAAa,KAAO,CAAC,WAAW,GAAG,MAAQ,OAAO;AAAA,IACpF,EAAE,IAAM,wBAAwB,IAAM,iBAAiB,KAAO,CAAC,eAAe,GAAG,MAAQ,OAAO;AAAA,IAChG,EAAE,IAAM,yBAAyB,IAAM,kBAAkB,KAAO,CAAC,gBAAgB,GAAG,MAAQ,OAAO;AAAA,IACnG,EAAE,IAAM,wBAAwB,IAAM,iBAAiB,KAAO,CAAC,eAAe,GAAG,MAAQ,OAAO;AAAA,IAChG,EAAE,IAAM,yBAAyB,IAAM,kBAAkB,KAAO,CAAC,gBAAgB,GAAG,MAAQ,OAAO;AAAA,IACnG,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,aAAa,GAAG,MAAQ,OAAO;AAAA,IAC1F,EAAE,IAAM,0BAA0B,IAAM,mBAAmB,KAAO,CAAC,iBAAiB,GAAG,MAAQ,OAAO;AAAA,IACtG,EAAE,IAAM,yBAAyB,IAAM,kBAAkB,KAAO,CAAC,gBAAgB,GAAG,MAAQ,OAAO;AAAA,IACnG,EAAE,IAAM,yBAAyB,IAAM,kBAAkB,KAAO,CAAC,gBAAgB,GAAG,MAAQ,OAAO;AAAA,IACnG,EAAE,IAAM,oBAAoB,IAAM,QAAQ,KAAO,CAAC,MAAM,GAAG,MAAQ,OAAO;AAAA,IAC1E,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,aAAa,GAAG,MAAQ,OAAO;AAAA,IAC1F,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,aAAa,GAAG,MAAQ,OAAO;AAAA,IAC1F,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,aAAa,GAAG,MAAQ,OAAO;AAAA,IAC1F,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,aAAa,GAAG,MAAQ,OAAO;AAAA,IAC1F,EAAE,IAAM,sBAAsB,IAAM,eAAe,KAAO,CAAC,aAAa,GAAG,MAAQ,OAAO;AAAA,IAC1F,EAAE,IAAM,oBAAoB,IAAM,aAAa,KAAO,CAAC,WAAW,GAAG,MAAQ,YAAY;AAAA,IACzF,EAAE,IAAM,yBAAyB,IAAM,UAAU,KAAO,CAAC,kBAAkB,EAAE;AAAA,IAC7E,EAAE,IAAM,4BAA4B,IAAM,aAAa,KAAO,CAAC,kBAAkB,EAAE;AAAA,IACnF,EAAE,IAAM,4BAA4B,IAAM,aAAa,KAAO,CAAC,kBAAkB,EAAE;AAAA,IACnF,EAAE,IAAM,uBAAuB,IAAM,YAAY,KAAO,CAAC,cAAc,EAAE;AAAA,IACzE,EAAE,IAAM,2BAA2B,IAAM,eAAe,KAAO,CAAC,aAAa,EAAE;AAAA,IAC/E,EAAE,IAAM,yBAAyB,IAAM,aAAa,KAAO,CAAC,WAAW,EAAE;AAAA,IACzE,EAAE,IAAM,0BAA0B,IAAM,cAAc,KAAO,CAAC,YAAY,EAAE;AAAA,IAC5E,EAAE,IAAM,iCAAiC,IAAM,iBAAiB,KAAO,CAAC,YAAY,EAAE;AAAA,IACtF,EAAE,IAAM,kCAAkC,IAAM,kBAAkB,KAAO,CAAC,YAAY,EAAE;AAAA,EAC1F;AAAA,EACA,iBAAmB;AAAA,IACjB;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,QAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,QAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,QAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,QAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,QAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,QAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,QAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,aAAe;AAAA,IACb;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,aAAe;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,aAAe;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,mBAAqB;AAAA,IACnB,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,oBAAsB,CAAC,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EAC1F,sBAAwB;AAAA,EACxB,kBAAoB;AAAA,IAClB,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,QAAU;AAAA,IACV,OAAS;AAAA,IACT,UAAY;AAAA,IACZ,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,EACvB;AAAA,EACA,yBAA2B;AAAA,IACzB;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,IAAM;AAAA,MACN,SAAW;AAAA,MACX,SAAW;AAAA,IACb;AAAA,EACF;AACF;;;AC/TA;AACA;AA7BA,IAAI,OAAOK,KAAI,iBAAiB,WAAW;AACzC,EAAAA,KAAI,eAAe;AACrB;AACA,IAAI,EAAE,mBAAmBA,OAAM;AAC7B,EAAAA,KAAI,gBAAgB;AACtB;AACA,IAAI,OAAOA,KAAI,UAAU,WAAW;AAClC,EAAAA,KAAI,QAAQ;AACd;AACA,IAAI,EAAE,mBAAmBA,OAAM;AAC7B,EAAAA,KAAI,gBAAgB;AACtB;AACA,IAAI,EAAE,cAAcA,OAAM;AACxB,EAAAA,KAAI,WAAW;AACjB;AACA,IAAI,OAAOA,KAAI,eAAe,YAAY;AACxC,EAAAA,KAAI,aAAa;AACnB;AACA,IAAI,EAAE,UAAUA,OAAM;AACpB,EAAAA,KAAI,OAAO;AACb;AAyBA,IAAI,wBAAwB;AAC5B,IAAI,eAAe;AACnB,IAAI,iBAAiB;AACrB,IAAI,4BAA4B;AAChC,IAAI,wBAAwB;AAC5B,IAAI,wBAAwB;AAE5B,IAAM,yCAAyC;AAE/C,SAAS,+BAA+B;AACtC,MAAI,uBAAuB;AACzB,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgBA,OAAM,sCAAsC;AAClE,MAAI,iBAAiB,OAAO,kBAAkB,UAAU;AACtD,4BAAwB;AACxB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAS;AACzC,QAAM,oBAAoB,WAAW,OAAO,YAAY,WAAW,UAAU;AAC7E,0BAAwB;AACxB,EAAAA,KAAI,sCAAsC,IAAI;AAChD;AAEA,mBAAmB;AAAA,EACjB,WAAW,MAAO,OAAOA,KAAI,eAAe,aAAaA,KAAI,aAAa;AAAA,EAC1E,YAAY,MAAM;AAChB,UAAM,OACJA,MAAK,QACLA,MAAK,UAAU,SACdA,MAAK,UAAU,SAAS,SAAS;AACpC,UAAM,SACHA,MAAK,SACJA,MAAK,eAAe,SACpBA,MAAK,eAAe,QAAQ,SAC5BA,MAAK,UAAU,SACfA,MAAK,UAAU,QAAQ,SACvB,WAAW;AACf,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAASA;AAAA,IACX;AAAA,EACF;AACF,CAAC;AAEDA,KAAI,MAAM,CAAC,QAAQ,OAAO,YAAY,SAAS;AAC7C,SAAO,OAAO,SAAS,GAAG,IAAI;AAChC;AAEA,IAAM,8BAA8B;AAAA,EAClC,QAAQ;AAAA,EACR,UAAU,CAAC;AAAA,EACX,aAAa;AACf;AACA,IAAM,4BAA4B,oBAAI,IAAI;AAE1C,SAASC,eAAc,UAAU;AAC/B,SACE,QAAQ,QAAQ,KAChB,OAAO,aAAa,YACpB,OAAO,aAAa,YACpB,YAAY;AAEhB;AAEA,SAASC,kBAAiB,UAAU,CAAC,GAAG;AACtC,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,SAAS,QAAQ,SAAS,GAAG,SAAS,GAAG;AAC3D,cAAU,QAAQ,KAAK;AACvB,QAAI,QAAQ,QAAQ,SAAS,GAAG;AAC9B,gBAAU,IAAI,KAAK;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASC,uBAAsB,OAAO,UAAU;AAC9C,SAAO,OAAO,KAAK,EAAE;AAAA,IAAQ;AAAA,IAAc,CAAC,QAAQ,UAClD,SAAS,OAAO,KAAK,CAAC;AAAA,EACxB;AACF;AAEA,SAASC,qBAAoB,UAAU;AACrC,MAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAa,CAAC;AACpB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,QAAI,OAAO,UAAU,UAAU;AAC7B,iBAAW,GAAG,IAAI;AAClB;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,UAAU,YAAY,OAAO,MAAM,YAAY,UAAU;AAC3E,iBAAW,GAAG,IAAI,MAAM;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,cAAc,YAAY,QAAQ;AACzC,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS,MAAM,KAAK,WAAW,CAAC,CAAC;AAAA,IACjC;AAAA,IACA,KAAK,MAAM,KAAK,SAAS,OAAO,CAAC,CAAC;AAAA,EACpC;AACF;AAEA,SAAS,cAAc,UAAU;AAC/B,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAIH,eAAc,QAAQ,GAAG;AAC3B,UAAMI,OAAMH,kBAAiB,SAAS,WAAW,CAAC,CAAC;AACnD,UAAM,aAAa,4BAA4B,SAASG,IAAG,KAAKA;AAChE,WAAOF,uBAAsB,YAAY,CAAC,UAAU,SAAS,SAAS,KAAK,CAAC;AAAA,EAC9E;AAEA,QAAM,MAAM,OAAO,QAAQ;AAC3B,SAAO,4BAA4B,SAAS,GAAG,KAAK;AACtD;AAEA,SAAS,8BAA8B,UAAU;AAC/C,MAAI,CAAC,UAAU;AACb;AAAA,EACF;AAEA,QAAM,MAAMF,eAAc,QAAQ,IAC9BC,kBAAiB,SAAS,WAAW,CAAC,CAAC,IACvC,OAAO,QAAQ;AAEnB,MAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,8BAA0B,IAAI,GAAG;AAAA,EACnC;AACF;AAEA,SAAS,+BAA+B,SAAS;AAC/C,MACE,CAAC,WACD,OAAO,QAAQ,QAAQ,cACvB,0BAA0B,SAAS,GACnC;AACA;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,KAAK,yBAAyB;AACxD,4BAA0B,MAAM;AAEhC,aAAW,OAAO,aAAa;AAC7B,QAAI;AACF,cAAQ,IAAI,GAAG;AAAA,IACjB,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEA,eAAe,4BAA4B;AACzC,QAAM,UAAU,6BAA6B;AAC7C,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,uBAAuB;AAC1B,UAAM,wBAAwB;AAAA,MAC5B;AAAA,IACF;AAEA,4BAAwB;AAAA;AAAA,MAA0B;AAAA,MAC/C,KAAK,CAAC,QAAQ;AACb,UACE,OAAO,KAAK,QAAQ,cACpB,OAAO,KAAK,QAAQ,cACpB,OAAO,KAAK,0BAA0B,cACtC,OAAO,KAAK,eAAe,cAC3B,OAAO,KAAK,cAAc,cAC1B,OAAO,KAAK,yBAAyB,YACrC;AACA,cAAM,IAAI,MAAM,6CAA6C;AAAA,MAC/D;AAEA,+BAAyB,GAAG;AAC5B,qCAA+B,GAAG;AAClC,aAAO;AAAA,IACT,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,8BAAwB;AACxB,YAAM;AAAA,IACR,CAAC;AAAA,EACL;AAEA,SAAO;AACT;AAEA,IAAMI,OAAM,CAAC,UAAU,UAAU,CAAC,MAAM;AACtC,QAAM,UAAU,6BAA6B;AAC7C,MAAI,OAAO,SAAS,QAAQ,YAAY;AACtC,WAAO,QAAQ,IAAI,UAAU,OAAO;AAAA,EACtC;AACA,gCAA8B,QAAQ;AACtC,SAAO,cAAc,UAAU,OAAO;AACxC;AAEA,IAAM,MAAM,CAAC,YAAY,WAAW;AAClC,QAAM,UAAU,6BAA6B;AAC7C,MAAI,OAAO,SAAS,QAAQ,YAAY;AACtC,WAAO,QAAQ,IAAI,SAAS,GAAG,MAAM;AAAA,EACvC;AACA,SAAO,cAAc,SAAS,GAAG,MAAM;AACzC;AAEA,IAAM,wBAAwB,CAAC,SAAS,SAAS;AAC/C,QAAM,UAAU,6BAA6B;AAC7C,MAAI,OAAO,SAAS,0BAA0B,YAAY;AACxD,WAAO,QAAQ,sBAAsB,MAAM;AAAA,EAC7C;AAEA,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,gCAA4B,SAAS;AACrC,gCAA4B,WAAW,CAAC;AACxC,gCAA4B,cAAc;AAC1C,WAAO;AAAA,MACL,QAAQ,4BAA4B;AAAA,MACpC,UAAU,EAAE,GAAG,4BAA4B,SAAS;AAAA,MACpD,aAAa,4BAA4B;AAAA,IAC3C;AAAA,EACF;AAEA,MAAI,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,KAAK,GAAG;AAC7D,gCAA4B,SAAS,OAAO,OAAO,KAAK;AAAA,EAC1D;AAEA,MAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,UAAU,GAAG;AAC5D,gCAA4B,WAAWF,qBAAoB,OAAO,QAAQ;AAAA,EAC5E;AAEA,QAAM,cAAc;AAAA,IAClB,OAAO,YACL,OAAO,aACP,OAAO,cACP,OAAO;AAAA,EACX;AACA,8BAA4B,cAAc;AAE1C,MAAI,aAAa;AACf,8BAA0B,EACvB,KAAK,CAACG,aAAY;AACjB,MAAAA,SAAQ,sBAAsB,MAAM;AACpC,qCAA+BA,QAAO;AAAA,IACxC,CAAC,EACA,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACnB;AAEA,SAAO;AAAA,IACL,QAAQ,4BAA4B;AAAA,IACpC,UAAU,EAAE,GAAG,4BAA4B,SAAS;AAAA,IACpD,aAAa,4BAA4B;AAAA,EAC3C;AACF;AAEA,IAAM,aAAa,OAAO,WAAW;AACnC,QAAM,UAAU,MAAM,0BAA0B;AAChD,SAAO,QAAQ,WAAW,MAAM;AAClC;AAEA,IAAM,YAAY,OAAO,QAAQ,UAAU,CAAC,MAAM;AAChD,QAAM,UAAU,MAAM,0BAA0B;AAChD,SAAO,QAAQ,UAAU,QAAQ,OAAO;AAC1C;AAEA,IAAM,uBAAuB,MAAM;AACjC,QAAM,UAAU,6BAA6B;AAC7C,MAAI,OAAO,SAAS,yBAAyB,YAAY;AACvD,WAAO,QAAQ,qBAAqB;AAAA,EACtC;AACA,SAAO;AAAA,IACL,QAAQ,4BAA4B;AAAA,IACpC,UAAU,EAAE,GAAG,4BAA4B,SAAS;AAAA,IACpD,aAAa,4BAA4B;AAAA,EAC3C;AACF;AAEA,IAAM,yBAAyB,CAAC,UAAU,CAAC,MAAM;AAC/C,QAAM,UAAU,6BAA6B;AAC7C,MAAI,OAAO,SAAS,2BAA2B,YAAY;AACzD,WAAO,QAAQ,uBAAuB,OAAO;AAAA,EAC/C;AAEA,QAAM,gBACJ,OAAO,SAAS,WAAW,YAAY,QAAQ,OAAO,KAAK,IACvD,QAAQ,OAAO,KAAK,EAAE,YAAY,IAClC;AAEN,QAAM,oBAAoB,MAAM,QAAQ,SAAS,OAAO,IACpD,QAAQ,QACL,IAAI,CAAC,WAAW,OAAO,UAAU,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,EACzD,OAAO,OAAO,IACjB,CAAC;AAEL,QAAM,UAAU,MAAM,KAAK,oBAAI,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC,CAAC;AAEzE,MAAI,kCAAkC;AACtC,QAAM,kCAAkC,YAAY;AAClD,QAAI,CAAC,iCAAiC;AACpC,wCAAkC,0BAA0B,EACzD,KAAK,CAACA,aAAY;AACjB,YAAI,OAAOA,UAAS,2BAA2B,YAAY;AACzD,iBAAOA,SAAQ,uBAAuB,OAAO;AAAA,QAC/C;AACA,eAAO;AAAA,MACT,CAAC,EACA,MAAM,MAAM,IAAI;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,OAAO,OAAO,iBAAiB;AACnD,UAAM,gBAAgB,MAAM,gCAAgC;AAC5D,QAAI,CAAC,iBAAiB,OAAO,kBAAkB,UAAU;AACvD,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,cAAc;AAC/B,QAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,SAAS,IAAI;AACjC,QAAI,OAAO,gBAAgB,YAAY;AACrC,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,eAAe,OAAO,SAAS,eAAe,YAAY;AACrE,aAAO,SAAS;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS,CAAC,GAAG,OAAO;AAAA,IACpB,UAAU;AAAA,MACR,SAAS,CAAC,GAAG,OAAO;AAAA,MACpB,MAAM,WAAW,UAAU,CAAC,GAAG;AAC7B,cAAM,SAAS,MAAM,cAAc,YAAY;AAC/C,YAAI,OAAO,WAAW,YAAY;AAChC,iBAAO,CAAC;AAAA,QACV;AACA,eAAO,OAAO,OAAO;AAAA,MACvB;AAAA,MACA,MAAM,UAAU,UAAU,CAAC,GAAG;AAC5B,cAAM,SAAS,MAAM,cAAc,WAAW;AAC9C,YAAI,OAAO,WAAW,YAAY;AAChC,iBAAO,CAAC;AAAA,QACV;AACA,eAAO,OAAO,OAAO;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kCAAkC,UAAU,aAAa;AAChE,MAAI,eAAe,OAAO,gBAAgB,UAAU;AAClD,WAAO;AAAA,EACT;AACA,QAAM,eAAe,wBAAwBP,KAAI,iBAAiB,CAAC,GAAG;AAAA,IACpE;AAAA,EACF,CAAC;AACD,SAAO,GAAG,YAAY,QAAQ,QAAQ;AACxC;AAEA,eAAe,yBAAyB;AACtC,MAAI,MAAM,QAAQA,KAAI,gBAAgB,KAAKA,KAAI,iBAAiB,SAAS,GAAG;AAC1E,WAAOA,KAAI;AAAA,EACb;AACA,MAAI,CAAC,2BAA2B;AAC9B,UAAM,qBAAqB;AAAA,MACzB;AAAA,MACAA,KAAI,eAAe;AAAA,IACrB;AACA,gCAA4B;AAAA;AAAA,MAA0B;AAAA,MACnD,KAAK,CAAC,QAAQ;AACb,YAAM,YAAY,MAAM,QAAQ,KAAK,mBAAmB,IACpD,IAAI,sBACJ,CAAC;AACL,MAAAA,KAAI,mBAAmB;AACvB,aAAO;AAAA,IACT,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,kCAA4B;AAC5B,YAAM;AAAA,IACR,CAAC;AAAA,EACL;AACA,SAAO;AACT;AAEA,eAAe,YAAY;AACzB,MAAI,OAAOA,KAAI,QAAQ,cAAcA,KAAI,QAAQ,WAAW;AAC1D,WAAOA,KAAI;AAAA,EACb;AACA,MAAI,CAAC,cAAc;AACjB,UAAM,eAAe;AAAA,MACnB;AAAA,MACAA,KAAI,eAAe;AAAA,IACrB;AACA,mBAAe;AAAA;AAAA,MAA0B;AAAA,MACtC,KAAK,CAAC,QAAQ;AACb,YAAM,OAAO,KAAK;AAClB,UAAI,OAAO,SAAS,YAAY;AAC9B,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AACA,MAAAA,KAAI,MAAM;AACV,aAAO;AAAA,IACT,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,qBAAe;AACf,YAAM;AAAA,IACR,CAAC;AAAA,EACL;AACA,SAAO;AACT;AAEA,eAAe,cAAc;AAC3B,MAAI,OAAOA,KAAI,UAAU,cAAcA,KAAI,UAAU,aAAa;AAChE,WAAOA,KAAI;AAAA,EACb;AACA,MAAI,CAAC,gBAAgB;AACnB,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACAA,KAAI,eAAe;AAAA,IACrB;AACA,qBAAiB;AAAA;AAAA,MAA0B;AAAA,MACxC,KAAK,CAAC,QAAQ;AACb,YAAM,OAAO,KAAK;AAClB,UAAI,OAAO,SAAS,YAAY;AAC9B,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AACA,MAAAA,KAAI,QAAQ;AACZ,aAAO;AAAA,IACT,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,uBAAiB;AACjB,YAAM;AAAA,IACR,CAAC;AAAA,EACL;AACA,SAAO;AACT;AAEA,eAAe,aAAa,MAAM;AAChC,QAAM,UAAU,MAAM,UAAU;AAChC,SAAO,QAAQ,GAAG,IAAI;AACxB;AAEA,eAAe,eAAe,MAAM;AAClC,QAAM,YAAY,MAAM,YAAY;AACpC,SAAO,UAAU,GAAG,IAAI;AAC1B;AAEA,YAAY,UAAU,UAAU,SAAS;AACvC,QAAM,YAAY,MAAM,YAAY;AACpC,SAAO,UAAU,QAAQ,GAAG,IAAI;AAClC;AACA,YAAY,QAAQ,UAAU,SAAS;AACrC,QAAM,YAAY,MAAM,YAAY;AACpC,SAAO,UAAU,MAAM,GAAG,IAAI;AAChC;AACA,YAAY,UAAU,UAAU,SAAS;AACvC,QAAM,YAAY,MAAM,YAAY;AACpC,SAAO,UAAU,QAAQ,GAAG,IAAI;AAClC;AACA,YAAY,OAAO,UAAU,SAAS;AACpC,QAAM,YAAY,MAAM,YAAY;AACpC,SAAO,UAAU,KAAK,GAAG,IAAI;AAC/B;AAEA,IAAM,eAAe,SAAU,QAAQ,OAAO,YAAY,MAAM;AAC9D,EAAAA,KAAI,IAAI,OAAO,SAAS,GAAG,IAAI;AACjC;AAEA,SAAS,yBAAyB,OAAO;AACvC,MAAI,UAAU,QAAQ,UAAU;AAAW,WAAO;AAClD,MAAI,OAAO,UAAU;AAAY,WAAO;AACxC,MAAI,OAAO,UAAU;AAAU,WAAO;AAEtC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MACJ,IAAI,CAAC,SAAS,yBAAyB,IAAI,CAAC,EAC5C,OAAO,CAAC,SAAS,SAAS,MAAS;AAAA,EACxC;AAEA,QAAM,SAAS,CAAC;AAChB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,UAAM,WAAW,yBAAyB,KAAK;AAC/C,QAAI,aAAa,QAAW;AAC1B,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aAAa,OAAO,OAAO,oBAAI,QAAQ,GAAG;AACjD,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,WAAO;AAAA,EACT;AACA,MAAI,KAAK,IAAI,KAAK,GAAG;AACnB,WAAO;AAAA,EACT;AACA,OAAK,IAAI,KAAK;AACd,SAAO,OAAO,KAAK;AACnB,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,iBAAa,MAAM,GAAG,GAAG,IAAI;AAAA,EAC/B;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAO;AAChC,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,SAAO,aAAa,gBAAgB,yBAAyB,KAAK,CAAC,CAAC;AACtE;AAEA,eAAe,oBAAoB,cAAc,SAAS,CAAC,GAAG;AAC5D,MAAI,QAAQ,kBAAkB;AAAO,WAAO;AAC5C,MAAI,OAAO,UAAU;AAAY,WAAO;AACxC,QAAM,aACJ,QAAQ,oBAAoB,GAAG,YAAY;AAC7C,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,YAAY,EAAE,OAAO,WAAW,CAAC;AACzD,QAAI,CAAC,IAAI;AAAI,aAAO;AACpB,WAAO,MAAM,IAAI,KAAK;AAAA,EACxB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAGAA,KAAI,WAAW;AAGfA,KAAI,QAAQ;AAGZA,KAAI,cAAc;AAGlBA,KAAI,kBAAkB;AAGtBA,KAAI,QAAe;AAGnBA,KAAI,mBAAmB;AAGvBA,KAAI,aAAa,MAAM,SAAS;AAChCA,KAAI,MAAM;AACVA,KAAI,QAAQ;AACZA,KAAI,SAAS;AACbA,KAAI,MAAMM;AACVN,KAAI,MAAM;AACVA,KAAI,wBAAwB;AAC5BA,KAAI,aAAa;AACjBA,KAAI,YAAY;AAChBA,KAAI,uBAAuB;AAC3BA,KAAI,yBAAyB;AAC7BA,KAAI,OAAO;AAAA,EACT,KAAAM;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF;AACAN,KAAI,eAAe;AACnBA,KAAI,mBAAmB,YAAY;AACjC,MAAIA,KAAI,gBAAgB,OAAOA,KAAI,aAAa,YAAY,YAAY;AACtE,WAAOA,KAAI;AAAA,EACb;AAEA,QAAM,wBAAwB;AAAA,IAC5B;AAAA,IACAA,KAAI,eAAe;AAAA,EACrB;AAEA,MAAI,CAAC,uBAAuB;AAC1B,4BAAwB;AAAA;AAAA,MAA0B;AAAA,MAC/C,KAAK,CAAC,QAAQ;AACb,YAAM,mBACJ,KAAK,gBACL,KAAK,SAAS,gBACd,KAAK,WACL;AACF,UAAI,CAAC,kBAAkB;AACrB,cAAM,IAAI,MAAM,yCAAyC;AAAA,MAC3D;AACA,MAAAA,KAAI,eAAe;AACnB,aAAO;AAAA,IACT,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,8BAAwB;AACxB,YAAM;AAAA,IACR,CAAC;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,eAAe,QAAQ;AAC9B,QAAM,iBAAiB,OAAO,gBAAgB;AAE9C,MAAI;AACF,UAAM,aAAa,iBACf,IAAI,YAAY,aAAa,EAAE,OAAO,CAAC,IACvC,IAAI,MAAM,WAAW;AACzB,IAAAA,KAAI,cAAc,UAAU;AAAA,EAC9B,SAAS,GAAG;AAAA,EAAC;AAEb,MAAI,OAAO,aAAa,aAAa;AACnC,QAAI,gBAAgB;AAClB,YAAM,eAAe,EAAE,QAAQ,SAAS,MAAM,UAAU,KAAK;AAC7D,UAAI;AACF,iBAAS,cAAc,IAAI,YAAY,aAAa,YAAY,CAAC;AAAA,MACnE,SAAS,GAAG;AAAA,MAAC;AACb,UAAI;AACF,iBAAS,cAAc,IAAI,YAAY,aAAa,YAAY,CAAC;AAAA,MACnE,SAAS,GAAG;AAAA,MAAC;AAAA,IACf,OAAO;AACL,UAAI;AACF,iBAAS,cAAc,IAAI,MAAM,WAAW,CAAC;AAAA,MAC/C,SAAS,GAAG;AAAA,MAAC;AACb,UAAI;AACF,iBAAS,cAAc,IAAI,MAAM,WAAW,CAAC;AAAA,MAC/C,SAAS,GAAG;AAAA,MAAC;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,SAAS,CAAC,GAAG;AAC3C,QAAM,iBAAiB,OAAO,gBAAgB;AAC9C,QAAM,UAAU;AAAA,IACd,IAAI,KAAK,IAAI;AAAA,IACb,GAAG;AAAA,EACL;AAEA,MAAI;AACF,UAAM,eAAe,iBACjB,IAAI,YAAY,sBAAsB,EAAE,QAAQ,QAAQ,CAAC,IACzD,IAAI,MAAM,oBAAoB;AAClC,IAAAA,KAAI,cAAc,YAAY;AAAA,EAChC,SAAS,GAAG;AAAA,EAAC;AAEb,MAAI,OAAO,aAAa,aAAa;AACnC,QAAI,gBAAgB;AAClB,YAAM,eAAe,EAAE,QAAQ,SAAS,SAAS,MAAM,UAAU,KAAK;AACtE,UAAI;AACF,iBAAS;AAAA,UACP,IAAI,YAAY,sBAAsB,YAAY;AAAA,QACpD;AAAA,MACF,SAAS,GAAG;AAAA,MAAC;AAAA,IACf,OAAO;AACL,UAAI;AACF,iBAAS,cAAc,IAAI,MAAM,oBAAoB,CAAC;AAAA,MACxD,SAAS,GAAG;AAAA,MAAC;AAAA,IACf;AAAA,EACF;AACF;AAWA,IAAM,oBAAoB;AAC1B,IAAI,YAAY;AAChB,IAAI,oBAAoB;AAGxB,SAAS,qBAAqB,KAAK;AACjC,MAAI;AACF,QAAI,OAAO,aAAa;AAAa;AACrC,QAAI,WAAW;AACf,QAAI,CAAC,KAAK;AAER,YAAM,cACJ,OAAO,WAAW,eAClB,OAAO,cACP,OAAO,WAAW,8BAA8B,EAAE;AACpD,iBAAW,cAAc,SAAS;AAAA,IACpC,WAAW,QAAQ,UAAU;AAC3B,YAAM,cACJ,OAAO,WAAW,eAClB,OAAO,cACP,OAAO,WAAW,8BAA8B,EAAE;AACpD,iBAAW,cAAc,SAAS;AAAA,IACpC,OAAO;AACL,iBAAW;AAAA,IACb;AACA,aAAS,gBAAgB,aAAa,cAAc,QAAQ;AAAA,EAC9D,SAAS,GAAG;AAAA,EAAC;AACf;AAGA,SAAS,8BAA8B,KAAK;AAC1C,MAAI;AAEF,QAAI,aAAa,mBAAmB;AAClC,UAAI;AACF,YAAI,OAAO,UAAU,wBAAwB;AAC3C,oBAAU,oBAAoB,UAAU,iBAAiB;AAAA,iBAClD,OAAO,UAAU,mBAAmB;AAC3C,oBAAU,eAAe,iBAAiB;AAAA,MAC9C,SAAS,GAAG;AAAA,MAAC;AACb,kBAAY;AACZ,0BAAoB;AAAA,IACtB;AAEA,QACE,QAAQ,YACR,OAAO,WAAW,eAClB,OAAO,YACP;AACA,YAAM,KAAK,OAAO,WAAW,8BAA8B;AAC3D,YAAM,WAAW,CAAC,MAAM;AACtB,cAAM,SAAS,GAAG,YAAY,SAAY,GAAG,UAAU,EAAE;AACzD,YAAI;AACF,gBAAM,WAAW,SAAS,SAAS;AACnC,mBAAS,gBAAgB,aAAa,cAAc,QAAQ;AAC5D,UAAAA,KAAI;AAAA,YACF,IAAI,YAAY,qBAAqB;AAAA,cACnC,QAAQ,EAAE,OAAO,UAAU,QAAQ,SAAS;AAAA,YAC9C,CAAC;AAAA,UACH;AAAA,QACF,SAAS,IAAI;AAAA,QAAC;AAAA,MAChB;AACA,kBAAY;AACZ,0BAAoB;AACpB,UAAI,OAAO,GAAG,qBAAqB;AACjC,WAAG,iBAAiB,UAAU,QAAQ;AAAA,eAC/B,OAAO,GAAG,gBAAgB;AAAY,WAAG,YAAY,QAAQ;AAAA,IACxE;AAAA,EACF,SAAS,GAAG;AAAA,EAAC;AACf;AAEA,IAAM,oBAAoB,OAAO,yBAAyBA,MAAK,OAAO;AACtE,IAAI,CAAC,mBAAmB;AACtB,SAAO,eAAeA,MAAK,SAAS;AAAA,IAClC,MAAM;AACJ,UAAI;AACF,YAAI,OAAO,WAAW;AAAa,iBAAO;AAC1C,eAAO,aAAa,QAAQ,iBAAiB,KAAK;AAAA,MACpD,SAAS,GAAG;AACV,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,IAAI,OAAO;AACT,UAAI;AACF,YAAI,OAAO,WAAW;AAAa;AACnC,cAAM,gBAAgBA,KAAI,eAAe,UAAU;AACnD,cAAM,gBAAgB,uBAAuB,KAAK;AAClD,YAAI,iBAAiB,CAAC,wBAAwB,eAAe,aAAa,GAAG;AAC3E,gBAAM,aACJ,eAAe,QACfA,KAAI,eAAe,QACnBA,KAAI,eAAe,UACnB;AACF,UAAAA,KAAI;AAAA,YACF;AAAA,YACA,cAAc,aAAa,8BAA8B,UAAU;AAAA,UACrE;AACA,UAAAA,KAAI;AAAA,YACF,IAAI,YAAY,qBAAqB;AAAA,cACnC,QAAQ,EAAE,OAAO,OAAO,eAAe,QAAQ,WAAW;AAAA,YAC5D,CAAC;AAAA,UACH;AACA;AAAA,QACF;AACA,YAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,uBAAa,WAAW,iBAAiB;AAAA,QAC3C,OAAO;AACL,uBAAa,QAAQ,mBAAmB,KAAK;AAAA,QAC/C;AAGA,6BAAqB,KAAK;AAE1B,sCAA8B,KAAK;AAGnC,QAAAA,KAAI;AAAA,UACF,IAAI,YAAY,qBAAqB;AAAA,YACnC,QAAQ,EAAE,OAAO,OAAO,QAAQ,MAAM;AAAA,UACxC,CAAC;AAAA,QACH;AAAA,MACF,SAAS,GAAG;AAAA,MAAC;AAAA,IACf;AAAA,EACF,CAAC;AACH;AAUAA,KAAI,mBAAmB,CAAC;AA2CxB,eAAe,MAAM,QAAQ;AAC3B,EAAAA,KAAI,eAAe;AACnB,MAAI;AACF,UAAM,OAAQ,UAAU,OAAO,QAAS;AACxC,UAAM,EAAE,MAAM,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC;AAE5C,IAAAA,KAAI,OAAO;AACX,IAAAA,KAAI,aAAa,OAAO,MAAM,QAAQ,aAAa,KAAK,MAAM;AAE9D,IAAAA,KAAI,gBAAgB,kBAAkB,IAAI;AAE1C,UAAM,qBACJ,QAAQ,OAAO,KAAK,iBAAiB,YAAY,KAAK,eAClD,KAAK,eACL;AAEN,QAAI,oBAAoB;AACtB,YAAM,0BAA0B;AAChC,4BAAsB,kBAAkB;AAAA,IAC1C,OAAO;AACL,4BAAsB,IAAI;AAAA,IAC5B;AAEA,QAAI;AACJ,QAAI,SAAS,UAAU;AACrB,oBAAc,MAAM,WAAW,IAAI;AAAA,IACrC,OAAO;AACL,YAAM,EAAE,cAAc,sBAAsB,GAAG,cAAc,IAAI,QAAQ,CAAC;AAC1E,YAAM,eAAe,wBAAwB,eAAe,EAAE,sBAAsB,CAAC;AACrF,YAAM,aACJ,eAAe,cACf,eAAe,QAAQ,cACvB,eAAe,SAAS,OACxB,IAAI,IAAI,uBAAuB,YAAY,EAAE,QAC7C,IAAI,IAAI,oBAAoB,YAAY,GAAG,EAAE;AAC/C,YAAM,EAAE,WAAAQ,WAAU,IAAI,MAAM;AAAA;AAAA,QAA0B;AAAA;AACtD,oBAAc,MAAMA,WAAUR,MAAK,eAAe;AAAA,QAChD,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,QACpB,6BAA6B;AAAA,MAC/B,CAAC;AAAA,IACH;AAEA,IAAAA,KAAI,WAAW,kBAAkB,aAAa,UAAU,IAAI;AAE5D,UAAM,2BACJA,MAAK,UAAU,QAAQ,OAAO,gBAAgB;AAEhD,IAAAA,KAAI,IAAI,QAAQ,sCAAsC,wBAAwB,EAAE;AAEhF,WAAO;AAAA,EACT,UAAE;AACA,IAAAA,KAAI,eAAe;AAAA,EACrB;AACF;AAGAA,KAAI,QAAQ;AAuBZ,eAAe,WAAW,QAAQ;AAChC,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,qBAAqB;AACtD,QAAM,cAAc,OAAO,eAAe;AAC1C,QAAM,kBAAkB,OAAO,mBAAmB;AAClD,MAAI,cAAc,OAAO,eAAe,CAAC;AACzC,QAAM,eAAe,wBAAwB,QAAQ,EAAE,sBAAsB,CAAC;AAC9E,QAAM,UAAW,UAAU,OAAO,cAAe;AACjD,MAAI;AACJ,MAAI,WAAW,QAAQ,SAAS;AAC9B,wBAAoBS;AAAA,MAClB,uBAAuB,QAAQ,SAAS,EAAE,cAAc,MAAM,CAAC;AAAA,IACjE;AAAA,EACF,OAAO;AACL,wBAAoB,GAAG,YAAY;AAAA,EACrC;AACA,QAAM,oBACH,WAAW,MAAM,QAAQ,QAAQ,SAAS,KAAK,QAAQ,aAAc,CAAC;AACzE,QAAM,mBACH,WAAW,OAAO,QAAQ,WAAW,cAAc,QAAQ,UAAW;AAEzE,MAAI;AACF,uBAAmBT,IAAG;AAEtB,UAAM,EAAE,cAAc,IAAI,qBAAqB;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,oBAAoB;AAAA,MACpB,6BAA6B;AAAA,IAC/B,CAAC;AAGD,UAAM,gBAAgB,MAAM,oBAAoB,cAAc,MAAM;AACpE,UAAM,gBAAgB,MAAM,QAAQ,QAAQ,SAAS,IACjD,OAAO,YACP,QAAQ,aAAa,OAAO,OAAO,cAAc,WAC/C,OAAO,OAAO,OAAO,SAAS,IAC9B,CAAC;AACP,UAAM,iBAAiB,eAAe,SAClC;AAAA,MACE,GAAG,cAAc;AAAA,MACjB,GAAG;AAAA,MACH,QAAQ,QAAQ,UAAU,cAAc,OAAO;AAAA,MAC/C,QAAQ,QAAQ,UAAU,cAAc,OAAO;AAAA,IACjD,IACA,EAAE,GAAG,OAAO;AAIhB,UAAM,kBAAkB;AAAA,MACtB,QAAQ,GAAG,YAAY;AAAA,MACvB,YAAY,GAAG,YAAY;AAAA,MAC3B,YAAY,GAAG,YAAY;AAAA,MAC3B,WAAW,GAAG,YAAY;AAAA,MAC1B,QAAQ,GAAG,YAAY;AAAA,IACzB;AACA,UAAM,eAAe,eAAe,SAAS,CAAC;AAC9C,kBAAc,EAAE,GAAG,iBAAiB,GAAG,cAAc,GAAG,YAAY;AAGpE,IAAAA,KAAI,SAAS,cAAc,WAAW;AAGtC,QAAI,qBAAqB,OAAO,aAAa,aAAa;AACxD,UAAI;AAEF,cAAM,cAAc,MAAMA,KAAI,SAAS,cAAc,QAAQ;AAC7D,YAAI,aAAa;AAEf,sBAAY,OAAO;AACnB,gBAAM,UAAU,SAAS,sBAAsB,CAAC,GAAG;AAAA,YACjD,CAAC,MAAM,EAAE,SAAS;AAAA,UACpB;AACA,mBAAS,qBAAqB,CAAC,GAAG,QAAQ,WAAW;AACrD,iCAAuB;AAAA,YACrB,MAAM;AAAA,YACN,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAAA,MACF,SAAS,GAAG;AACV,qBAAa,KAAKA,MAAK,QAAQ,kCAAkC,CAAC;AAAA,MACpE;AAAA,IACF;AAGA,QAAI,cAAc;AAClB,QAAI,kBAAkB,CAAC;AACvB,QAAI;AACF,YAAMU,uBAAsB,MAAM,uBAAuB;AACzD,YAAM,MAAM,MAAM,6BAA6B;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,qBAAqB,WAAW;AAAA,QAChC,wBAAwB,EAAE,WAAW,QAAQ;AAAA,MAC/C,GAAG,EAAE,eAAeA,qBAAoB,CAAC;AACzC,oBAAc,IAAI;AAClB,wBAAkB,IAAI,mBAAmB,CAAC;AAAA,IAC5C,SAAS,OAAO;AACd,mBAAa;AAAA,QACXV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,IAAAA,KAAI,WAAW,kBAAkB;AAAA,MAC/B,MAAM;AAAA,MACN,GAAG;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,IACb,CAAC;AAGD,mBAAe;AAAA,MACb,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,IAAAA,KAAI,cAAc,IAAI,YAAY,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACrE,UAAM;AAAA,EACR;AACF;;;ACvoCA,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB,CAAC,QAAQ,MAAM,MAAM,MAAM,MAAM,KAAK;AAE/D,SAAS,gBAAgB,cAAc,CAAC,GAAG;AACzC,QAAM,kBAAkB,MAAM,QAAQ,YAAY,eAAe,IAC7D,YAAY,gBAAgB,IAAI,CAAC,UAAU;AAAA,IAC3C,GAAG;AAAA,IACH,SAAS,MAAM,mBAAmB,SAAS,KAAK,UAAU,IAAI,OAAO,OAAO,MAAM,WAAW,EAAE,CAAC;AAAA,EAClG,EAAE,IACA,CAAC;AAEL,QAAM,sBAAsB,MAAM,QAAQ,YAAY,mBAAmB,IACrE,YAAY,oBAAoB,IAAI,CAAC,YACrC,mBAAmB,SAAS,UAAU,IAAI,OAAO,OAAO,WAAW,EAAE,CAAC,CACvE,IACC,CAAC;AAEL,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,wBAAwB,gBAAgB,iCAAoB;AACzE,IAAM,mBAAmB,sBAAsB,WAAW;AAE1D,IAAM,aAAa,IAAI;AAAA,EACrB,sBAAsB,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC;AACpE;AAEA,IAAM,UAAU,IAAI,IAAI,OAAO,QAAQ,sBAAsB,eAAe,CAAC,CAAC,CAAC;AAE/E,IAAM,gBAAgB,IAAI,IAAI,OAAO,QAAQ,sBAAsB,eAAe,CAAC,CAAC,CAAC;AAErF,IAAM,yBAAyB,sBAAsB,uBAAuB,CAAC;AAE7E,IAAM,oBAAoB,IAAI,IAAI,sBAAsB,qBAAqB,CAAC,CAAC;AAE/E,IAAM,0BAA0B,EAAE,GAAI,sBAAsB,oBAAoB,CAAC,EAAG;AAEpF,IAAM,gBAAgB,sBAAsB,qBAAqB,CAAC;AAElE,IAAM,iBAAiB,MAAM,QAAQ,sBAAsB,kBAAkB,IACzE,sBAAsB,mBAAmB,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC,EAAE,OAAO,OAAO,IACrF,CAAC,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAExE,IAAM,mBAAmB,eAAe,SAAS,OAAO,sBAAsB,wBAAwB,EAAE,CAAC,IACrG,OAAO,sBAAsB,oBAAoB,IACjD;AAEJ,IAAM,qBAAqB;AAE3B,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,iCAAiC,QAAQ,IAAI,OAAO,IAAI;AAC/D,MAAI,CAAC,SAAS,CAAC;AAAM,WAAO;AAC5B,QAAM,YAAY,IAAI,OAAO,MAAM,IAAI,uCAAuC,IAAI;AAClF,SAAO,OAAO,KAAK,EAAE,QAAQ,WAAW,EAAE;AAC5C;AAEA,SAAS,sBAAsB,aAAa,IAAI,UAAU,MAAM;AAC9D,MAAI,OAAO,OAAO,cAAc,EAAE;AAClC,MAAI,eAAe;AAEnB,SAAO,KAAK;AAAA,IACV;AAAA,IACA,CAAC,OAAO,kBAAkB,KAAK,UAAU,iBAAiB,YAAY,UAAU,kBAAkB,KAAK,SAAS,oBAAoB;AAClI,UAAI,aAAa;AAAS,eAAO;AACjC,YAAM,iBAAiB,iCAAiC,GAAG,oBAAoB,EAAE,GAAG,mBAAmB,EAAE,IAAI,KAAK;AAClH,YAAM,cAAc,IAAI,QAAQ,GAAG,oBAAoB,EAAE,QAAQ,OAAO,IAAI,mBAAmB,EAAE;AACjG,sBAAgB;AAChB,aAAO,SAAS,cAAc,IAAI,UAAU,GAAG,WAAW;AAAA,IAC5D;AAAA,EACF;AAEA,SAAO,KAAK;AAAA,IACV;AAAA,IACA,CAAC,OAAO,kBAAkB,KAAK,UAAU,iBAAiB,YAAY,YAAY,oBAAoB,KAAK,WAAW,mBAAmB,iBAAiB;AACxJ,UAAI,aAAa;AAAW,eAAO;AACnC,YAAM,iBAAiB,iCAAiC,GAAG,oBAAoB,EAAE,GAAG,mBAAmB,EAAE,IAAI,KAAK;AAClH,YAAM,gBAAgB,IAAI,UAAU,GAAG,sBAAsB,EAAE,QAAQ,SAAS,IAAI,qBAAqB,EAAE,IAAI,YAAY,KAAK,UAAU;AAC1I,sBAAgB;AAChB,aAAO,SAAS,cAAc,IAAI,UAAU,GAAG,aAAa;AAAA,IAC9D;AAAA,EACF;AAEA,MAAI,WAAW,eAAe,GAAG;AAC/B,YAAQ,qBAAqB;AAC7B,YAAQ,SAAS,UAAU,YAAY,uBAAuB;AAC9D,eAAW,SAAS,0BAA0B;AAAA,EAChD;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAAQ,IAAI,aAAa,QAAQ;AAC1D,QAAM,aAAa,OAAO,SAAS,EAAE,EAClC,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE,KAAK;AAE9B,QAAM,SAAS,cAAc,eAAe,SAAS,GAAG,UAAU,MAAM;AACxE,SAAO,UAAU,MAAM,GAAG,UAAU;AACtC;AAEA,SAAS,oBAAoB,SAAS,OAAO,aAAa,aAAa,QAAQ,SAAS,IAAI;AAC1F,MAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AAAa,WAAO;AAC/C,QAAM,YAAY,kBAAkB,OAAO,UAAU;AACrD,MAAI,QAAQ;AACV,UAAM,kBAAkB,GAAG,UAAU,IAAI,MAAM;AAC/C,QAAI,CAAC,QAAQ,mBAAmB,IAAI,eAAe,GAAG;AACpD,cAAQ,mBAAmB,IAAI,iBAAiB,oBAAI,IAAI,CAAC;AAAA,IAC3D;AACA,YAAQ,mBAAmB,IAAI,eAAe,EAAE,IAAI,WAAW,WAAW;AAAA,EAC5E,WAAW,eAAe,QAAQ;AAChC,YAAQ,iBAAiB,IAAI,WAAW,WAAW;AAAA,EACrD,OAAO;AACL,QAAI,CAAC,QAAQ,uBAAuB,IAAI,UAAU,GAAG;AACnD,cAAQ,uBAAuB,IAAI,YAAY,oBAAI,IAAI,CAAC;AAAA,IAC1D;AACA,YAAQ,uBAAuB,IAAI,UAAU,EAAE,IAAI,WAAW,WAAW;AAAA,EAC3E;AACA,UAAQ,sBAAsB;AAC9B,SAAO;AACT;AAEA,SAAS,wBAAwB,MAAM,IAAI;AACzC,SAAO,OAAO,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,MAAM,GAAG;AACnD;AAEA,SAAS,eAAe,QAAQ,IAAI;AAClC,MAAI,CAAC;AAAO,WAAO;AACnB,MAAI,QAAQ,KAAK,KAAK;AAAG,WAAO;AAChC,SAAO,2BAA2B,KAAK,KAAK;AAC9C;AAEA,SAAS,yBAAyB,WAAW,IAAI;AAC/C,QAAM,QAAQ,OAAO,YAAY,EAAE,EAAE,KAAK;AAC1C,MAAI,CAAC;AAAO,WAAO;AAEnB,QAAM,YAAY,MAAM,MAAM,gBAAgB;AAC9C,MAAI,WAAW;AACb,UAAM,QAAQ,wBAAwB,UAAU,CAAC,CAAC;AAClD,WAAO,eAAe,KAAK,IAAI,QAAQ;AAAA,EACzC;AAEA,SAAO,cAAc,KAAK,KAAK;AACjC;AAEA,SAAS,eAAe,QAAQ,IAAI;AAClC,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,SAAS,MAAM;AAAG,WAAO;AAErC,QAAM,QAAQ,OAAO,MAAM;AAC3B,MAAI,eAAe,SAAS,KAAK;AAAG,WAAO;AAE3C,SAAO,eAAe,OAAO,CAAC,SAAS,cAAc;AACnD,UAAM,kBAAkB,KAAK,IAAI,OAAO,OAAO,IAAI,MAAM;AACzD,UAAM,oBAAoB,KAAK,IAAI,OAAO,SAAS,IAAI,MAAM;AAC7D,WAAO,oBAAoB,kBAAkB,YAAY;AAAA,EAC3D,GAAG,gBAAgB;AACrB;AAEA,SAAS,8BAA8B,SAAS,IAAI,QAAQ,OAAO;AACjE,QAAM,WAAW,OAAO,UAAU,EAAE,EAAE,YAAY;AAClD,QAAM,cAAc,eAAe,KAAK;AAExC,MAAI,CAAC,QAAQ,OAAO,UAAU,MAAM,EAAE,SAAS,QAAQ,GAAG;AACxD,WAAO,uBAAuB,WAAW;AAAA,EAC3C;AACA,MAAI,CAAC,UAAU,UAAU,SAAS,EAAE,SAAS,QAAQ,GAAG;AACtD,WAAO,sBAAsB,WAAW;AAAA,EAC1C;AACA,MAAI,CAAC,SAAS,WAAW,QAAQ,MAAM,EAAE,SAAS,QAAQ,GAAG;AAC3D,WAAO,uBAAuB,WAAW;AAAA,EAC3C;AACA,MAAI,CAAC,UAAU,SAAS,SAAS,EAAE,SAAS,QAAQ,GAAG;AACrD,WAAO,uBAAuB,WAAW;AAAA,EAC3C;AACA,MAAI,CAAC,OAAO,QAAQ,QAAQ,QAAQ,EAAE,SAAS,QAAQ,GAAG;AACxD,WAAO,sBAAsB,WAAW;AAAA,EAC1C;AACA,MAAI,CAAC,SAAS,QAAQ,QAAQ,WAAW,OAAO,EAAE,SAAS,QAAQ,GAAG;AACpE,WAAO,oBAAoB,WAAW;AAAA,EACxC;AAEA,SAAO;AACT;AAEA,SAAS,2BAA2B,MAAM,IAAI;AAC5C,QAAM,QAAQ,wBAAwB,GAAG;AACzC,MAAI,CAAC,eAAe,KAAK;AAAG,WAAO;AACnC,MAAI,wDAAwD,KAAK,KAAK;AAAG,WAAO;AAChF,MAAI,2BAA2B,KAAK,KAAK;AAAG,WAAO;AACnD,SAAO;AACT;AAEA,SAAS,iBAAiB,QAAQ,IAAI;AACpC,SAAO,OAAO,SAAS,EAAE,EACtB,MAAM,KAAK,EACX,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO;AACnB;AAEA,SAAS,iBAAiB,QAAQ,IAAI,YAAY,IAAI;AACpD,MAAI,CAAC;AAAW,WAAO;AACvB,QAAM,OAAO,OAAO,SAAS,EAAE;AAC/B,QAAM,aAAa,KAAK,MAAM,8BAA8B;AAC5D,MAAI,CAAC,YAAY;AACf,WAAO,GAAG,IAAI,WAAW,SAAS;AAAA,EACpC;AAEA,QAAM,QAAQ,WAAW,CAAC,KAAK;AAC/B,QAAM,SAAS,iBAAiB,WAAW,CAAC,CAAC;AAC7C,MAAI,CAAC,OAAO,SAAS,SAAS;AAAG,WAAO,KAAK,SAAS;AACtD,QAAM,OAAO,UAAU,KAAK,GAAG,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK;AACvD,SAAO,KAAK,QAAQ,WAAW,CAAC,GAAG,IAAI;AACzC;AAEA,SAAS,aAAa,QAAQ,IAAI,OAAO,IAAI;AAC3C,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,IAAI,OAAO,MAAM,IAAI,SAAS,GAAG,EAAE,KAAK,OAAO,SAAS,EAAE,CAAC;AACpE;AAEA,SAAS,iBAAiB,WAAW,IAAI;AACvC,QAAM,OAAO,OAAO,YAAY,EAAE,EAAE,QAAQ,UAAU,GAAG,EAAE,KAAK;AAChE,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,KAAK,QAAQ,kBAAkB,CAAC,IAAI,KAAK,OAAO,GAAG,GAAG,GAAG,GAAG,YAAY,CAAC,EAAE;AACpF;AAEA,SAAS,yBAAyB,aAAa,IAAI,UAAU,MAAM;AACjE,QAAM,QAAQ,OAAO,cAAc,EAAE;AACrC,MAAI,CAAC;AAAO,WAAO;AAEnB,SAAO,MAAM;AAAA,IACX;AAAA,IACA,CAAC,WAAW,SAAS,OAAO,eAAe;AACzC,UAAI,YAAY,iBAAiB,OAAO,WAAW;AACnD,UAAI,CAAC,aAAa,WAAW,YAAY,GAAG;AAC1C,cAAM,gBAAgB,OAAO,UAAU,EAAE,MAAM,6BAA6B;AAC5E,cAAM,WAAW,gBAAgB,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI;AAClE,cAAM,QAAQ,iBAAiB,QAAQ;AACvC,qBAAa,gBAAgB,KAAK;AAAA,MACpC;AAEA,UAAI,SAAS;AACX,gBAAQ,cAAc;AACtB,mBAAW,SAAS,0CAA0C;AAAA,MAChE;AAEA,aAAO,IAAI,OAAO,GAAG,SAAS,IAAI,UAAU,KAAK,OAAO;AAAA,IAC1D;AAAA,EACF;AACF;AAEA,SAAS,8BAA8B,aAAa,IAAI,UAAU,MAAM;AACtE,QAAM,QAAQ,OAAO,cAAc,EAAE;AACrC,MAAI,CAAC;AAAO,WAAO;AAEnB,MAAI,iBAAiB;AAErB,QAAM,SAAS,MAAM,QAAQ,gCAAgC,CAAC,WAAW,OAAO,UAAU;AACxF,UAAM,aAAa,OAAO,SAAS,EAAE,EAAE,MAAM,8BAA8B;AAC3E,QAAI,CAAC;AAAY,aAAO;AAExB,UAAM,cAAc,iBAAiB,WAAW,CAAC,KAAK,EAAE;AACxD,UAAM,gBAAgB,YAAY,KAAK,CAAC,UAAU,gBAAgB,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC;AAC3F,UAAM,qBAAqB,YAAY,SAAS,YAAY,KAAK,YAAY,KAAK,CAAC,UAAU,gBAAgB,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC;AACtI,QAAI,CAAC,iBAAiB,CAAC;AAAoB,aAAO;AAElD,sBAAkB;AAClB,WAAO,OAAO,KAAK,IAAI,KAAK;AAAA,EAC9B,CAAC;AAED,MAAI,WAAW,iBAAiB,GAAG;AACjC,YAAQ,cAAc;AACtB,eAAW,SAAS,2CAA2C;AAC/D,YAAQ,SAAS,cAAc,cAAc,uCAAuC;AAAA,EACtF;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAAQ,IAAI,YAAY,IAAI;AACxD,MAAI,CAAC;AAAW,WAAO;AACvB,QAAM,OAAO,OAAO,SAAS,EAAE;AAC/B,QAAM,aAAa,KAAK,MAAM,8BAA8B;AAC5D,MAAI,CAAC;AAAY,WAAO;AAExB,QAAM,QAAQ,WAAW,CAAC,KAAK;AAC/B,QAAM,SAAS,iBAAiB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,UAAU,SAAS;AACpF,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,KAAK,QAAQ,WAAW,CAAC,GAAG,EAAE;AAAA,EACvC;AAEA,QAAM,OAAO,UAAU,KAAK,GAAG,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK;AACvD,SAAO,KAAK,QAAQ,WAAW,CAAC,GAAG,IAAI;AACzC;AAEA,SAAS,yBAAyB,QAAQ,IAAI,SAAS,CAAC,WAAW,QAAQ;AACzE,QAAM,OAAO,OAAO,SAAS,EAAE;AAC/B,QAAM,aAAa,KAAK,MAAM,8BAA8B;AAC5D,MAAI,CAAC;AAAY,WAAO;AAExB,QAAM,QAAQ,WAAW,CAAC,KAAK;AAC/B,QAAM,gBAAgB,iBAAiB,WAAW,CAAC,CAAC;AACpD,QAAM,gBAAgB,OAAO,MAAM,KAAK,aAAa,CAAC;AACtD,QAAM,aAAa,MAAM,QAAQ,aAAa,IAC1C,cAAc,OAAO,OAAO,IAC5B;AAEJ,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO,KAAK,QAAQ,WAAW,CAAC,GAAG,EAAE;AAAA,EACvC;AAEA,QAAM,OAAO,UAAU,KAAK,GAAG,WAAW,KAAK,GAAG,CAAC,GAAG,KAAK;AAC3D,SAAO,KAAK,QAAQ,WAAW,CAAC,GAAG,IAAI;AACzC;AAEA,SAAS,mCAAmC,aAAa,IAAI,UAAU,MAAM;AAC3E,QAAM,QAAQ,OAAO,cAAc,EAAE;AACrC,MAAI,CAAC;AAAO,WAAO;AAEnB,MAAI,iBAAiB;AAErB,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA,CAAC,WAAW,KAAK,OAAO,UAAU,YAAY,WAAW,gBAAgB;AACvE,YAAM,aAAa,OAAO,SAAS,EAAE,EAAE,MAAM,8BAA8B;AAC3E,UAAI,CAAC;AAAY,eAAO;AAExB,YAAM,mBAAmB,iBAAiB,WAAW,CAAC,CAAC;AACvD,UAAI,CAAC,iBAAiB,SAAS,UAAU;AAAG,eAAO;AAEnD,YAAM,kBAAkB,OAAO,cAAc,EAAE,EAAE,MAAM,8BAA8B;AACrF,YAAM,mBAAmB,OAAO,eAAe,EAAE,EAAE,MAAM,8BAA8B;AACvF,UAAI,CAAC,mBAAmB,CAAC;AAAkB,eAAO;AAElD,YAAM,eAAe,iBAAiB,gBAAgB,CAAC,CAAC;AACxD,YAAM,gBAAgB,iBAAiB,iBAAiB,CAAC,CAAC;AAC1D,YAAM,0BACJ,aAAa,KAAK,CAAC,UAAU,gBAAgB,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC,KACtE,cAAc,KAAK,CAAC,UAAU,gBAAgB,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC;AAEzE,UAAI,CAAC;AAAyB,eAAO;AAErC,YAAM,YAAY,qBAAqB,OAAO,UAAU;AACxD,wBAAkB;AAClB,aAAO,UAAU,QAAQ,IAAI,GAAG,GAAG,KAAK,KAAK,IAAI,GAAG,GAAG,SAAS,GAAG;AAAA,IACrE;AAAA,EACF;AAEA,MAAI,WAAW,iBAAiB,GAAG;AACjC,YAAQ,cAAc;AACtB,eAAW,SAAS,wCAAwC;AAC5D,YAAQ,SAAS,yBAAyB,cAAc,iCAAiC;AAAA,EAC3F;AAEA,SAAO;AACT;AAEA,SAAS,4BAA4B,cAAc,CAAC,GAAG;AACrD,MAAI,CAAC,eAAe,OAAO,gBAAgB;AAAU,WAAO,CAAC;AAC7D,QAAM,mBAAmB,YAAY;AACrC,MAAI,oBAAoB,OAAO,qBAAqB,UAAU;AAC5D,WAAO;AAAA,EACT;AACA,QAAM,mBAAmB,YAAY,QAAQ;AAC7C,MAAI,oBAAoB,OAAO,qBAAqB,UAAU;AAC5D,WAAO;AAAA,EACT;AACA,SAAO,CAAC;AACV;AAEA,SAAS,iBAAiB,cAAc,CAAC,GAAG;AAC1C,QAAM,aAAa,4BAA4B,WAAW;AAC1D,QAAM,SAAS,OAAO,WAAW,SAAS;AAC1C,MAAI,CAAC,OAAO,SAAS,MAAM;AAAG,WAAO;AACrC,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC;AACxC;AAEA,SAAS,0BAA0B,YAAY,IAAI,YAAY,oBAAoB;AACjF,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,EACN;AACA,QAAM,WAAW,eAAe,SAAS;AACzC,MAAI,CAAC;AAAU,WAAO;AAEtB,QAAM,kBAAkB,OAAO,SAAS,OAAO,SAAS,CAAC,IACrD,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,SAAS,CAAC,CAAC,IAC1C;AACJ,QAAM,YAAY,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,OAAO,kBAAkB,sBAAsB,IAAI,CAAC,CAAC;AACrG,QAAM,eAAe,WAAW;AAChC,MAAI,eAAe;AAAG,WAAO;AAC7B,MAAI,eAAe;AAAG,WAAO;AAC7B,SAAO,IAAI,YAAY;AACzB;AAEA,SAAS,4BAA4B,aAAa,IAAI,UAAU,MAAM,UAAU,CAAC,GAAG;AAClF,QAAM,QAAQ,OAAO,cAAc,EAAE;AACrC,MAAI,CAAC;AAAO,WAAO;AAEnB,QAAM,YAAY,iBAAiB,QAAQ,UAAU,CAAC,CAAC;AACvD,MAAI,eAAe;AACnB,MAAI,cAAc;AAElB,QAAM,SAAS,MAAM,QAAQ,2CAA2C,CAAC,WAAW,KAAK,OAAO,UAAU;AACxG,UAAM,aAAa,OAAO,SAAS,EAAE,EAAE,MAAM,8BAA8B;AAC3E,QAAI,CAAC;AAAY,aAAO;AAExB,UAAM,cAAc,iBAAiB,WAAW,CAAC,CAAC;AAClD,UAAM,gBAAgB,YAAY,SAAS,kBAAkB;AAC7D,QAAI,CAAC;AAAe,aAAO;AAE3B,UAAM,gBAAgB,YAAY,KAAK,CAAC,UAAU,mCAAmC,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;AACnH,UAAM,YAAY,cAAc,MAAM,gCAAgC;AAEtE,QAAI,WAAW;AACb,YAAM,aAAa,0BAA0B,UAAU,CAAC,GAAG,SAAS;AACpE,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,MACT;AACA,YAAMW,aAAY,yBAAyB,OAAO,CAAC,WACjD,OAAO,OAAO,CAAC,UAAU,UAAU,sBAAsB,UAAU,aAAa,CACjF;AACD,sBAAgB;AAChB,aAAO,IAAI,UAAU,GAAGA,UAAS,IAAI,KAAK,KAAK,UAAU;AAAA,IAC3D;AAEA,UAAM,iBAAiB,2FAA2F,KAAK,KAAK;AAC5H,UAAM,gBAAgB,sBAAsB,KAAK,KAAK;AACtD,QAAI,kBAAkB;AAAe,aAAO;AAE5C,UAAM,YAAY,qBAAqB,OAAO,kBAAkB;AAChE,mBAAe;AACf,WAAO,IAAI,GAAG,GAAG,SAAS,YAAY,KAAK,cAAc,GAAG;AAAA,EAC9D,CAAC;AAED,MAAI,SAAS;AACX,QAAI,eAAe,GAAG;AACpB,cAAQ,cAAc;AACtB,iBAAW,SAAS,+CAA+C;AACnE,cAAQ,SAAS,aAAa,YAAY,kEAAkE,OAAO,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI;AAAA,IAC9I;AACA,QAAI,cAAc,GAAG;AACnB,cAAQ,cAAc;AACtB,iBAAW,SAAS,kCAAkC;AACtD,cAAQ,SAAS,WAAW,WAAW,oCAAoC;AAAA,IAC7E;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,WAAW,CAAC,GAAG;AAC3C,MAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW;AAAG,WAAO;AAC9D,QAAM,gBAAgB,SAAS,OAAO,CAAC,YAAY,CAAC,iBAAiB,SAAS,OAAO,CAAC;AACtF,MAAI,cAAc,WAAW;AAAG,WAAO;AACvC,MAAI,cAAc,SAAS;AAAG,WAAO;AACrC,QAAM,YAAY,cAAc,CAAC;AACjC,MAAI,CAAC,SAAS,SAAS,QAAQ,EAAE,SAAS,SAAS;AAAG,WAAO;AAC7D,SAAO;AACT;AAEA,SAAS,wBAAwB,WAAW,aAAa,QAAQ,WAAW,CAAC,GAAG;AAC9E,QAAM,SAAS,qBAAqB,QAAQ;AAC5C,QAAM,cAAc,wBAAwB,SAAS;AACrD,MAAI,aAAa;AACf,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,WAAW,OAAO,SAAS,EAAE,MAAM,aAAa;AACtD,MAAI,UAAU;AACZ,UAAM,WAAW;AAAA,MACf,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AACA,UAAM,OAAO,OAAO,SAAS,CAAC,CAAC;AAC/B,QAAI,SAAS,IAAI,GAAG;AAClB,aAAO;AAAA,QACL,aAAa,OAAO,SAAS,IAAI,CAAC;AAAA,QAClC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,OAAO,SAAS,EAAE,MAAM,mBAAmB;AAC/D,MAAI,aAAa;AACf,UAAM,OAAO,YAAY,CAAC;AAC1B,UAAM,WAAW,YAAY,CAAC;AAC9B,UAAM,QAAQ,yBAAyB,QAAQ;AAC/C,QAAI,OAAO;AACT,UAAI,oBAAoB;AACxB,UAAI,SAAS,MAAM;AACjB,4BAAoB,cAAc,KAAK;AAAA,MACzC,WAAW,SAAS,MAAM;AACxB,4BAAoB,iBAAiB,KAAK;AAAA,MAC5C,OAAO;AACL,4BAAoB,cAAc,KAAK,kBAAkB,KAAK;AAAA,MAChE;AAEA,aAAO;AAAA,QACL,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,SAAS,EAAE,MAAM,sBAAsB;AACxE,MAAI,mBAAmB;AACrB,UAAM,QAAQ,wBAAwB,kBAAkB,CAAC,CAAC;AAC1D,QAAI,eAAe,KAAK,GAAG;AACzB,aAAO;AAAA,QACL,aAAa,aAAa,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,SAAS,EAAE,MAAM,sBAAsB;AACxE,MAAI,mBAAmB;AACrB,UAAM,QAAQ,wBAAwB,kBAAkB,CAAC,CAAC;AAC1D,QAAI,eAAe,KAAK,GAAG;AACzB,aAAO;AAAA,QACL,aAAa,aAAa,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,qBAAqB,OAAO,SAAS,EAAE,MAAM,sBAAsB;AACzE,MAAI,oBAAoB;AACtB,UAAM,QAAQ,wBAAwB,mBAAmB,CAAC,CAAC;AAC3D,QAAI,eAAe,KAAK,GAAG;AACzB,aAAO;AAAA,QACL,aAAa,cAAc,KAAK;AAAA,QAChC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,SAAS,EAAE,MAAM,0BAA0B;AAC5E,MAAI,mBAAmB;AACrB,UAAM,QAAQ,wBAAwB,kBAAkB,CAAC,CAAC;AAC1D,QAAI,eAAe,KAAK,GAAG;AACzB,aAAO;AAAA,QACL,aAAa,sBAAsB,KAAK;AAAA,QACxC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,OAAO,SAAS,EAAE,MAAM,aAAa;AACvD,MAAI,WAAW;AACb,UAAM,QAAQ,yBAAyB,UAAU,CAAC,CAAC;AACnD,QAAI,OAAO;AACT,aAAO;AAAA,QACL,aAAa,SAAS,KAAK,WAAW,KAAK;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,OAAO,SAAS,EAAE,MAAM,UAAU;AACrD,MAAI,YAAY;AACd,UAAM,QAAQ,yBAAyB,WAAW,CAAC,CAAC;AACpD,QAAI,OAAO;AACT,aAAO;AAAA,QACL,aAAa,SAAS,KAAK;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,OAAO,SAAS,EAAE,MAAM,UAAU;AACtD,MAAI,aAAa;AACf,UAAM,QAAQ,yBAAyB,YAAY,CAAC,CAAC;AACrD,QAAI,OAAO;AACT,aAAO;AAAA,QACL,aAAa,UAAU,KAAK;AAAA,QAC5B;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACA,QAAM,gBAAgB,OAAO,SAAS,EAAE,MAAM,uCAAuC;AACrF,MAAI,eAAe;AACjB,UAAM,OAAO,YAAY,cAAc,CAAC,CAAC;AACzC,WAAO;AAAA,MACL,aAAa,aAAa,IAAI;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,gBAAgB;AAAA,IACpB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AACA,QAAM,kBAAkB,OAAO,SAAS,EAAE,MAAM,sDAAsD;AACtG,MAAI,iBAAiB;AACnB,WAAO;AAAA,MACL,aAAa,eAAe,cAAc,gBAAgB,CAAC,CAAC,CAAC;AAAA,MAC7D;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,gBAAgB;AAAA,IACpB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACA,QAAM,kBAAkB,OAAO,SAAS,EAAE,MAAM,kDAAkD;AAClG,MAAI,iBAAiB;AACnB,WAAO;AAAA,MACL,aAAa,eAAe,cAAc,gBAAgB,CAAC,CAAC,CAAC;AAAA,MAC7D;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACA,QAAM,gBAAgB,OAAO,SAAS,EAAE,MAAM,qDAAqD;AACnG,MAAI,eAAe;AACjB,WAAO;AAAA,MACL,aAAa,kBAAkB,YAAY,cAAc,CAAC,CAAC,CAAC;AAAA,MAC5D;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,SAAS,EAAE,MAAM,uBAAuB;AACzE,MAAI,mBAAmB;AACrB,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACrE,WAAO;AAAA,MACL,aAAa,6DAA6D,KAAK;AAAA,MAC/E;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,cAAc,cAAc;AAC9B,WAAO;AAAA,MACL,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,kBAAkB,OAAO,SAAS,EAAE,MAAM,iCAAiC;AACjF,MAAI,iBAAiB;AACnB,UAAM,mBAAmB;AAAA,MACvB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AACA,UAAM,WAAW,iBAAiB,gBAAgB,CAAC,CAAC;AACpD,QAAI,UAAU;AACZ,aAAO;AAAA,QACL,aAAa,oBAAoB,QAAQ;AAAA,QACzC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,SAAS,EAAE,MAAM,yBAAyB;AACtE,MAAI,cAAc;AAChB,UAAM,WAAW,8BAA8B,aAAa,CAAC,GAAG,aAAa,CAAC,CAAC;AAC/E,QAAI,UAAU;AACZ,aAAO;AAAA,QACL,aAAa,oBAAoB,QAAQ;AAAA,QACzC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,OAAO,SAAS,EAAE,MAAM,mBAAmB;AACpE,MAAI,kBAAkB;AACpB,UAAM,aAAa,2BAA2B,iBAAiB,CAAC,CAAC;AACjE,QAAI,YAAY;AACd,aAAO;AAAA,QACL,aAAa,oBAAoB,UAAU;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,OAAO,SAAS,EAAE,MAAM,2BAA2B;AAC1E,MAAI,gBAAgB;AAClB,UAAM,WAAW,8BAA8B,eAAe,CAAC,GAAG,eAAe,CAAC,CAAC;AACnF,QAAI,UAAU;AACZ,aAAO;AAAA,QACL,aAAa,SAAS,QAAQ;AAAA,QAC9B;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,qBAAqB,OAAO,SAAS,EAAE,MAAM,qBAAqB;AACxE,MAAI,oBAAoB;AACtB,UAAM,aAAa,2BAA2B,mBAAmB,CAAC,CAAC;AACnE,QAAI,YAAY;AACd,aAAO;AAAA,QACL,aAAa,SAAS,UAAU;AAAA,QAChC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,SAAS,EAAE,MAAM,sEAAsE;AACnH,MAAI,cAAc;AAChB,UAAM,SAAS,aAAa,CAAC,KAAK;AAClC,UAAM,OAAO,aAAa,CAAC,KAAK;AAChC,UAAM,cAAc,SAAS,SAAS,MAAM,gBAAgB,IAAI;AAChE,UAAM,YAAY;AAAA,MAChB,GAAG,CAAC,YAAY,WAAW;AAAA,MAC3B,GAAG,CAAC,eAAe,cAAc;AAAA,MACjC,GAAG,CAAC,YAAY,aAAa;AAAA,MAC7B,GAAG,CAAC,aAAa,cAAc;AAAA,MAC/B,IAAI,CAAC,UAAU;AAAA,MACf,IAAI,CAAC,WAAW;AAAA,MAChB,IAAI,CAAC,aAAa;AAAA,MAClB,IAAI,CAAC,cAAc;AAAA,IACrB;AAEA,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,aAAa,iBAAiB,WAAW;AAAA,QACzC;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,UAAM,UAAU,UAAU,MAAM,KAAK,CAAC;AACtC,UAAM,kBAAkB,QACrB,IAAI,CAAC,iBAAiB,UAAU,YAAY,WAAW,WAAW,EAAE,EACpE,KAAK,GAAG;AAEX,QAAI,iBAAiB;AACnB,aAAO;AAAA,QACL,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,OAAO,YAAY;AACjD,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAAG,WAAO,GAAG,KAAK;AACxE,MAAI,OAAO,UAAU,YAAY,MAAM,KAAK;AAAG,WAAO,MAAM,KAAK;AACjE,SAAO,GAAG,UAAU;AACtB;AAEA,SAAS,mBAAmB,cAAc,CAAC,GAAG;AAC5C,QAAM,SAAS,aAAa,UAAU,OAAO,YAAY,WAAW,WAChE,YAAY,SACZ;AAEJ,QAAM,KAAK,QAAQ,QAAQ,eAAe,CAAC;AAC3C,SAAO;AAAA,IACL,IAAI,uBAAuB,GAAG,IAAI,GAAG;AAAA,IACrC,IAAI,uBAAuB,GAAG,IAAI,GAAG;AAAA,IACrC,IAAI,uBAAuB,GAAG,IAAI,IAAI;AAAA,IACtC,IAAI,uBAAuB,GAAG,IAAI,IAAI;AAAA,EACxC;AACF;AAEA,SAAS,6BAA6B,SAAS,aAAa;AAC1D,QAAM,YAAY,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,CAAC,EAAE;AAAA,IAC/D,CAAC,CAAC,WAAW,WAAW,MAAM,IAAI,SAAS,IAAI,WAAW;AAAA,EAC5D;AAEA,QAAM,kBAAkB,CAAC;AACzB,aAAW,CAAC,IAAI,GAAG,KAAK,QAAQ,uBAAuB,QAAQ,GAAG;AAChE,UAAM,WAAW,cAAc,EAAE;AACjC,QAAI,CAAC,YAAY,CAAC,KAAK;AAAM;AAC7B,UAAM,OAAO,MAAM,KAAK,IAAI,QAAQ,CAAC,EAClC,IAAI,CAAC,CAAC,WAAW,WAAW,MAAM,IAAI,SAAS,IAAI,WAAW,IAAI,EAClE,KAAK,IAAI;AACZ,oBAAgB,KAAK,sBAAsB,QAAQ;AAAA,EAAQ,IAAI;AAAA,EAAK;AAAA,EACtE;AAEA,aAAW,CAAC,WAAW,GAAG,KAAK,QAAQ,mBAAmB,QAAQ,GAAG;AACnE,UAAM,CAAC,IAAI,MAAM,IAAI,OAAO,SAAS,EAAE,MAAM,GAAG;AAChD,QAAI,CAAC,UAAU,CAAC,KAAK;AAAM;AAC3B,UAAM,OAAO,MAAM,KAAK,IAAI,QAAQ,CAAC,EAClC,IAAI,CAAC,CAAC,WAAW,WAAW,MAAM,IAAI,SAAS,IAAI,MAAM,IAAI,WAAW,IAAI,EAC5E,KAAK,IAAI;AACZ,QAAI,CAAC;AAAM;AACX,QAAI,OAAO,QAAQ;AACjB,sBAAgB,KAAK,IAAI;AACzB;AAAA,IACF;AACA,UAAM,WAAW,cAAc,EAAE;AACjC,QAAI,CAAC;AAAU;AACf,oBAAgB,KAAK,sBAAsB,QAAQ;AAAA,EAAQ,IAAI;AAAA,EAAK;AAAA,EACtE;AAEA,QAAM,WAAW,CAAC,GAAG,WAAW,GAAG,eAAe,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC7E,MAAI,CAAC,SAAS,KAAK;AAAG,WAAO;AAE7B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,uBAAuB,OAAO,IAAI,UAAU,IAAI;AACvD,MAAI,CAAC,WAAW,CAAC,QAAQ,KAAK;AAAG,WAAO;AACxC,QAAM,aAAa;AAAA,EAAgD,OAAO;AAAA;AAE1E,MAAI,eAAe,KAAK,IAAI,GAAG;AAC7B,WAAO,KAAK,QAAQ,kBAAkB;AAAA,EAAa,UAAU,EAAE;AAAA,EACjE;AAEA,SAAO,GAAG,UAAU;AAAA,EAAK,IAAI;AAC/B;AAEA,SAAS,eAAe,QAAQ,IAAI;AAClC,MAAI,CAAC;AAAO,WAAO;AACnB,MAAI,MAAM,SAAS,GAAG;AAAG,WAAO;AAChC,MAAI,MAAM,SAAS,GAAG;AAAG,WAAO;AAChC,QAAM,eAAe,MAAM,MAAM,GAAG,EAAE,CAAC;AACvC,SAAO,kBAAkB,SAAS,YAAY;AAChD;AAEA,SAAS,kBAAkB,QAAQ,IAAI;AACrC,QAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,GAAG;AACrC,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,EAAE,YAAY,QAAQ,MAAM,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE;AAAA,EAC5D;AACA,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,QAAM,WAAW,MAAM,MAAM,GAAG,EAAE;AAClC,QAAM,aAAa,SAAS,KAAK,CAAC,YAAY,iBAAiB,SAAS,OAAO,CAAC,KAAK;AACrF,SAAO,EAAE,YAAY,MAAM,SAAS;AACtC;AAEA,SAAS,0BAA0B;AACjC,SAAO;AAAA,IACL,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,eAAe;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,eAAe,oBAAI,IAAI;AAAA,IACvB,OAAO,CAAC;AAAA,IACR,cAAc,oBAAI,IAAI;AAAA,IACtB,kBAAkB,oBAAI,IAAI;AAAA,IAC1B,wBAAwB,oBAAI,IAAI;AAAA,IAChC,oBAAoB,oBAAI,IAAI;AAAA,IAC5B,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,IAC3B,+BAA+B;AAAA,EACjC;AACF;AAEA,SAAS,mCAAmC,UAAU,IAAI;AACxD,QAAM,UAAU,OAAO,WAAW,EAAE,EACjC,YAAY,EACZ,QAAQ,QAAQ,EAAE;AAErB,QAAM,eACJ,QAAQ,SAAS,4BAA4B,KAC7C,QAAQ,SAAS,4BAA4B,KAC7C,QAAQ,SAAS,4BAA4B;AAE/C,QAAM,iBAAiB,QAAQ,SAAS,yCAAyC;AAEjF,SAAO;AAAA,IACL,WAAW;AAAA,IACX,aAAa;AAAA,EACf;AACF;AAEA,SAAS,gCAAgC,YAAY,IAAI;AACvD,QAAM,MAAM,OAAO,aAAa,EAAE,EAAE,YAAY;AAChD,QAAM,gBAAgB,IAAI,SAAS,qBAAqB;AACxD,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,aAAa;AAAA,IACf;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,aAAa;AAAA,EACf;AACF;AAEA,SAAS,8BAA8B,aAAa,IAAI,UAAU,MAAM;AACtE,MAAI,OAAO,OAAO,cAAc,EAAE;AAClC,QAAM,QAAQ;AAAA,IACZ,WAAW;AAAA,IACX,aAAa;AAAA,IACb,0BAA0B;AAAA,IAC1B,wBAAwB;AAAA,EAC1B;AAEA,SAAO,KAAK,QAAQ,uCAAuC,CAAC,WAAW,OAAO,YAAY;AACxF,UAAM,UAAU,OAAO,WAAW,EAAE;AACpC,UAAM,oBAAoB,qBAAqB,KAAK,OAAO,KAAK,wBAAwB,KAAK,OAAO;AACpG,QAAI,CAAC;AAAmB,aAAO;AAE/B,UAAM,cAAc,mCAAmC,OAAO;AAC9D,UAAM,YAAY,MAAM,aAAa,YAAY;AACjD,UAAM,cAAc,MAAM,eAAe,YAAY;AACrD,UAAM,4BAA4B;AAClC,WAAO;AAAA,EACT,CAAC;AAED,SAAO,KAAK;AAAA,IACV;AAAA,IACA,CAAC,QAAQ,SAAS,QAAQ,WAAW,gBAAgB;AACnD,YAAM,YAAY,aAAa,eAAe;AAChD,YAAM,cAAc,gCAAgC,SAAS;AAC7D,YAAM,YAAY,MAAM,aAAa,YAAY;AACjD,YAAM,cAAc,MAAM,eAAe,YAAY;AACrD,YAAM,0BAA0B;AAChC,aAAO;AAAA,IACP;AAAA,EACF;AAEA,MAAI,YAAY,MAAM,2BAA2B,KAAK,MAAM,yBAAyB,IAAI;AACvF,eAAW,SAAS,4CAA4C;AAChE,QAAI,MAAM,2BAA2B,GAAG;AACtC;AAAA,QACE;AAAA,QACA,yBAAyB,MAAM,wBAAwB;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,MAAM,yBAAyB,GAAG;AAC/C;AAAA,MACE;AAAA,MACA,WAAW,MAAM,sBAAsB;AAAA,IACzC;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,MAAM;AACvB;AAEA,SAAS,QAAQ,SAAS,SAAS;AACjC,MAAI,CAAC,WAAW,CAAC;AAAS;AAC1B,MAAI,CAAC,QAAQ,MAAM,SAAS,OAAO,GAAG;AACpC,YAAQ,MAAM,KAAK,OAAO;AAAA,EAC5B;AACF;AAEA,SAAS,gBAAgB,SAAS,OAAO;AACvC,QAAM,UAAU,QAAQ,cAAc,IAAI,KAAK,KAAK;AACpD,UAAQ,cAAc,IAAI,OAAO,UAAU,CAAC;AAC9C;AAEA,SAAS,wBAAwB,cAAc,CAAC,GAAG;AACjD,QAAM,SAAS,aAAa,UAAU,OAAO,YAAY,WAAW,WAChE,YAAY,SACZ;AAEJ,QAAM,YAAY,QAAQ,QAAQ,aAAa,CAAC;AAChD,SAAO;AAAA,IACL,MAAM,UAAU,SAAS;AAAA,IACzB,MAAM,UAAU,SAAS;AAAA,IACzB,SAAS,UAAU,YAAY;AAAA,IAC/B,WAAW,UAAU,cAAc;AAAA,EACrC;AACF;AAEA,SAAS,WAAW,QAAQ,MAAM;AAChC,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,SAAS,IAAI,MAAM;AAC5B;AAEA,SAAS,iBAAiB,MAAM;AAC9B,QAAM,QAAQ,OAAO,IAAI,EAAE,MAAM,mBAAmB;AACpD,MAAI,CAAC;AAAO,WAAO;AACnB,SAAO,OAAO,MAAM,CAAC,CAAC;AACxB;AAEA,SAAS,oBAAoB,mBAAmB,CAAC,GAAG;AAClD,QAAM,SAAS,iBACZ,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,iBAAiB,EAAE,EAAE,EAAE,EAChD,OAAO,CAAC,UAAU,OAAO,SAAS,MAAM,IAAI,CAAC;AAEhD,MAAI,OAAO,SAAS;AAAG,WAAO;AAE9B,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,CAAC,OAAO,MAAM,IAAI;AACxB,UAAM,oBAAoB,MAAM,OAAO,UAAU,MAAM,SAAS,KAAK,OAAO,SAAS;AACrF,QAAI;AAAmB,aAAO;AAE9B,UAAM,mCACJ,MAAM,OAAO,UAAU,MAAM,SAAS,KAAK,OAAO,QAAQ;AAC5D,QAAI;AAAkC,aAAO;AAE7C,QAAI,MAAM,OAAO,OAAO,MAAM;AAC5B,UAAI,OAAO,QAAQ;AAAG,eAAO;AAC7B,UAAI,OAAO,QAAQ;AAAG,eAAO;AAAA,IAC/B;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,qBAAqB;AACzB,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACrD,QAAI,OAAO,KAAK,EAAE,QAAQ,OAAO,QAAQ,CAAC,EAAE,MAAM;AAChD,2BAAqB;AACrB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC;AAAoB,WAAO;AAEhC,QAAM,UAAU,OAAO,OAAO,SAAS,CAAC,GAAG,QAAQ;AACnD,MAAI,WAAW;AAAG,WAAO;AACzB,MAAI,WAAW;AAAG,WAAO;AACzB,SAAO;AACT;AAEA,SAAS,mCAAmC,YAAY,IAAI;AAC1D,QAAM,QAAQ,OAAO,SAAS,EAAE,MAAM,kDAAkD;AACxF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC7B,MAAI,CAAC,OAAO,SAAS,KAAK;AAAG,WAAO;AACpC,MAAI,SAAS,OAAO,SAAS;AAAK,WAAO;AACzC,SAAO;AACT;AAEA,SAAS,kCAAkC,aAAa,IAAI,OAAO,GAAG;AACpE,MAAI,CAAC,cAAc,CAAC,OAAO,SAAS,IAAI;AAAG,WAAO;AAClD,QAAM,MAAM;AAAA,IACV,IAAI;AAAA,MACF,GAAG;AAAA,IACL;AAAA,IACA,IAAI;AAAA,MACF,GAAG;AAAA,IACL;AAAA,IACA,IAAI;AAAA,MACF,GAAG;AAAA,IACL;AAAA,EACF;AACA,SAAO,MAAM,UAAU,IAAI,IAAI,KAAK;AACtC;AAEA,SAAS,2BAA2B,QAAQ,IAAI;AAC9C,QAAM,SAAS,kBAAkB,KAAK;AACtC,QAAM,OAAO,OAAO,QAAQ,QAAQ,EAAE;AACtC,QAAM,YAAY,KAAK,MAAM,iBAAiB;AAC9C,MAAI,CAAC;AAAW,WAAO;AAEvB,QAAM,OAAO,OAAO,UAAU,CAAC,CAAC;AAChC,MAAI,CAAC,OAAO,SAAS,IAAI;AAAG,WAAO;AACnC,MAAI,QAAQ;AAAG,WAAO;AACtB,MAAI,QAAQ;AAAG,WAAO;AACtB,MAAI,QAAQ;AAAG,WAAO;AACtB,SAAO;AACT;AAEA,SAAS,mBAAmB,SAAS,oBAAI,IAAI,GAAG;AAC9C,SAAO,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,cAAc;AAC5C,UAAM,QAAQ,OAAO,aAAa,EAAE;AACpC,WACE,2BAA2B,KAAK,KAAK,KACrC,eAAe,KAAK,KAAK,KACzB,mCAAmC,KAAK,KAAK;AAAA,EAEjD,CAAC;AACH;AAEA,SAAS,qBAAqB,SAAS,oBAAI,IAAI,GAAG;AAChD,SAAO,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,cAAc,6BAA6B,KAAK,OAAO,aAAa,EAAE,CAAC,CAAC;AAC1G;AAEA,SAAS,mBAAmB,SAAS,oBAAI,IAAI,GAAG;AAC9C,SAAO,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,cAAc;AAC5C,UAAM,QAAQ,OAAO,aAAa,EAAE;AACpC,WACE,kBAAkB,KAAK,KAAK,KAC5B,8BAA8B,KAAK,KAAK,KACxC,kCAAkC,KAAK,KAAK,KAC5C,6CAA6C,KAAK,KAAK;AAAA,EAE3D,CAAC;AACH;AAEA,SAAS,qBAAqB,SAAS,QAAQ,IAAI;AACjD,SAAO,MAAM,KAAK,QAAQ,cAAc,QAAQ,CAAC,EAC9C,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAC1B,MAAM,GAAG,KAAK,EACd,IAAI,CAAC,CAAC,KAAK,MAAM,KAAK;AAC3B;AAEA,SAAS,WAAW,SAAS,QAAQ;AACnC,MAAI,CAAC,WAAW,CAAC;AAAQ;AACzB,UAAQ,aAAa,IAAI,MAAM;AACjC;AAEA,SAAS,SAAS,eAAe,CAAC,GAAG,SAAS;AAC5C,MAAI,CAAC,MAAM,QAAQ,YAAY,KAAK,CAAC;AAAS,WAAO;AACrD,SAAO,aAAa,KAAK,CAAC,UAAU,QAAQ,KAAK,OAAO,KAAK,CAAC,CAAC;AACjE;AAEA,SAAS,0BAA0B,eAAe,CAAC,GAAG;AACpD,aAAW,SAAS,cAAc;AAChC,UAAM,SAAS,kBAAkB,KAAK;AACtC,QAAI,OAAO,eAAe;AAAQ;AAClC,UAAM,QAAQ,OAAO,OAAO,IAAI,EAAE,MAAM,UAAU;AAClD,QAAI,CAAC;AAAO;AACZ,UAAM,QAAQ,yBAAyB,MAAM,CAAC,CAAC;AAC/C,QAAI,CAAC,SAAS,UAAU;AAAQ;AAChC,UAAM,UAAU,OAAO,KAAK,EAAE,MAAM,wBAAwB;AAC5D,QAAI,SAAS;AACX,YAAM,MAAM,OAAO,QAAQ,CAAC,CAAC;AAC7B,UAAI,OAAO,SAAS,GAAG;AAAG,eAAO,MAAM;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,eAAe,CAAC,GAAG,UAAU,IAAI;AAC3D,QAAM,iBAAiB,YAAY;AACnC,QAAM,cAAc,SAAS,cAAc,MAAM;AACjD,QAAM,mBAAmB,SAAS,cAAc,YAAY;AAC5D,QAAM,kBAAkB,SAAS,cAAc,SAAS;AACxD,QAAM,kBAAkB,SAAS,cAAc,SAAS;AACxD,QAAM,mBAAmB,aAAa,SAAS,gBAAgB;AAC/D,QAAM,mBAAmB,SAAS,cAAc,UAAU;AAC1D,QAAM,iBAAiB,SAAS,cAAc,qBAAqB;AACnE,QAAM,qBAAqB,SAAS,cAAc,kDAAkD;AACpG,QAAM,eAAe,eAAe,oBAAoB;AACxD,QAAM,qBACJ,YAAY,QACX,gBAAgB,mBAAmB,oBAAqB,oBAAoB;AAE/E,QAAM,kBAAkB,kBAAkB;AAC1C,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,UAAU;AACd,MAAI,mBAAmB,CAAC,eAAe,CAAC,kBAAkB;AACxD,cAAU;AAAA,EACZ,WAAW,gBAAiB,eAAe,oBAAqB;AAC9D,cAAU;AAAA,EACZ;AAEA,QAAM,uBACJ,aAAa,SAAS,cAAc,MACnC,aAAa,SAAS,KAAK,KAAK,aAAa,SAAS,KAAK,KAAK,aAAa,SAAS,OAAO;AAChG,QAAM,oBAAoB,SAAS,cAAc,6BAA6B;AAC9E,QAAM,WAAW,wBAAwB;AAEzC,QAAM,iBAAiB,0BAA0B,YAAY;AAC7D,QAAM,eAAe,aAAa,SAAS,SAAS,KAAK,aAAa,SAAS,SAAS;AACxF,QAAM,eAAe,aAAa,SAAS,SAAS,KAAK,aAAa,SAAS,SAAS;AAExF,MAAI,OAAO;AACX,MAAK,kBAAkB,kBAAkB,MAAO,cAAc;AAC5D,WAAO;AAAA,EACT,WAAY,kBAAkB,kBAAkB,MAAO,cAAc;AACnE,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,+BAA+B,SAAS,IAAI;AACnD,QAAM,MAAM,OAAO,UAAU,EAAE,EAAE,YAAY;AAC7C,MAAI,CAAC,SAAS,WAAW,QAAQ,MAAM,EAAE,SAAS,GAAG;AAAG,WAAO;AAC/D,MAAI,CAAC,QAAQ,OAAO,QAAQ,QAAQ,EAAE,SAAS,GAAG;AAAG,WAAO;AAC5D,MAAI,CAAC,UAAU,SAAS,QAAQ,EAAE,SAAS,GAAG;AAAG,WAAO;AACxD,MAAI,CAAC,OAAO,QAAQ,MAAM,EAAE,SAAS,GAAG;AAAG,WAAO;AAClD,MAAI,CAAC,QAAQ,SAAS,QAAQ,WAAW,OAAO,EAAE,SAAS,GAAG;AAAG,WAAO;AACxE,MAAI,CAAC,UAAU,UAAU,WAAW,WAAW,QAAQ,EAAE,SAAS,GAAG;AAAG,WAAO;AAC/E,SAAO;AACT;AAEA,SAAS,kBAAkB,eAAe,CAAC,GAAG,UAAU,IAAI,eAAe,EAAE,iBAAiB,MAAM,GAAG;AACrG,MAAI,cAAc,iBAAiB;AACjC,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,CAAC,UAAU,KAAK,SAAS,UAAU,UAAU,EAAE,SAAS,OAAO,GAAG;AACpE,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,aAAa,KAAK,CAAC,UAAU,gBAAgB,KAAK,OAAO,KAAK,CAAC,CAAC,GAAG;AACrE,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,aAAa,aAChB,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,CAAC,WAAW,OAAO,eAAe,MAAM,EAC/C,IAAI,CAAC,WAAW,OAAO,OAAO,IAAI,CAAC;AAEtC,QAAM,aAAa,WAAW,KAAK,CAAC,UAAU,kBAAkB,KAAK,KAAK,CAAC;AAC3E,QAAM,QAAQ,WAAW,KAAK,CAAC,UAAU,OAAO,KAAK,KAAK,CAAC;AAC3D,QAAM,QAAQ,WAAW,KAAK,CAAC,UAAU,OAAO,KAAK,KAAK,CAAC;AAC3D,QAAM,oBAAoB,SAAS;AACnC,QAAM,eAAe,WAAW,SAAS,SAAS,KAAK,WAAW,SAAS,SAAS;AACpF,QAAM,eAAe,WAAW,SAAS,SAAS,KAAK,WAAW,SAAS,SAAS;AAEpF,QAAM,UAAU,WACb,IAAI,CAAC,UAAU,MAAM,MAAM,uCAAuC,CAAC,EACnE,KAAK,OAAO;AACf,QAAM,YAAY,WACf,IAAI,CAAC,UAAU,MAAM,MAAM,yCAAyC,CAAC,EACrE,KAAK,OAAO;AACf,QAAM,cAAc,WACjB,IAAI,CAAC,UAAU,MAAM,MAAM,6BAA6B,CAAC,EACzD,KAAK,OAAO;AAEf,QAAM,UAAU,OAAO,UAAU,CAAC,CAAC;AACnC,QAAM,YAAY,OAAO,YAAY,CAAC,CAAC;AACvC,QAAM,YAAY,QAAQ,WAAW,OAAO,SAAS,OAAO,KAAK,WAAW,GAAG;AAC/E,QAAM,YAAY,WAAW,KAAK,CAAC,UAAU,iBAAiB,KAAK,KAAK,CAAC;AACzE,QAAM,uBAAuB,QAAQ,WAAW,aAAa,WAAW;AAExE,QAAM,oBAAoB,CAAC,YAAY,mBAAmB,cAAc,aAAa,SAAS,EAAE,OAAO,OAAO,EAAE;AAChH,QAAM,kBAAkB,wBAAwB,qBAAqB;AACrE,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,SAAU,WAAW,QAAQ,CAAC,KAAO,aAAa,UAAU,CAAC,KAAO,eAAe,YAAY,CAAC,KAAM;AAC5G,QAAM,qBAAqB,+BAA+B,MAAM;AAChE,QAAM,UAAU,aAAa,CAAC;AAC9B,QAAM,YAAY,eAAe,aAAa,eAAe,aAAa;AAC1E,QAAM,SAAS,YACX;AAAA,IACE;AAAA,IACA,SAAS,OAAO,SAAS,OAAO,IAAI,UAAU;AAAA,IAC9C,WAAW,OAAO,SAAS,SAAS,IAAI,YAAY;AAAA,EACtD,IACA;AACJ,QAAM,eAAe,SAAS,KAAK;AAEnC,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,kCAAkC,SAAS,IAAI,QAAQ,GAAG;AACjE,QAAM,MAAM,OAAO,UAAU,EAAE,EAAE,YAAY;AAC7C,QAAM,eAAe,OAAO,KAAK;AAEjC,MAAI,QAAQ;AAAS,WAAO;AAC5B,MAAI,CAAC,QAAQ,SAAS,QAAQ,WAAW,OAAO,EAAE,SAAS,GAAG,GAAG;AAC/D,QAAI,OAAO,SAAS,YAAY,KAAK,gBAAgB;AAAK,aAAO;AACjE,WAAO;AAAA,EACT;AACA,MAAI,CAAC,QAAQ,OAAO,QAAQ,UAAU,WAAW,MAAM,EAAE,SAAS,GAAG;AAAG,WAAO;AAC/E,MAAI,CAAC,UAAU,UAAU,WAAW,QAAQ,EAAE,SAAS,GAAG;AAAG,WAAO;AACpE,MAAI,CAAC,SAAS,WAAW,QAAQ,QAAQ,SAAS,EAAE,SAAS,GAAG;AAAG,WAAO;AAC1E,MAAI,CAAC,UAAU,SAAS,UAAU,SAAS,EAAE,SAAS,GAAG;AAAG,WAAO;AACnE,MAAI,CAAC,OAAO,QAAQ,QAAQ,QAAQ,EAAE,SAAS,GAAG;AAAG,WAAO;AAC5D,SAAO;AACT;AAEA,SAAS,iBAAiB,eAAe,CAAC,GAAG,UAAU,IAAI,eAAe,EAAE,iBAAiB,MAAM,GAAG,cAAc,EAAE,iBAAiB,MAAM,GAAG;AAC9I,MAAI,cAAc,mBAAmB,aAAa,iBAAiB;AACjE,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,YAAY,oBAAI,IAAI,CAAC,OAAO,WAAW,WAAW,SAAS,IAAI,CAAC;AACtE,MAAI,CAAC,UAAU,IAAI,OAAO,GAAG;AAC3B,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,aAAa,KAAK,CAAC,UAAU,eAAe,KAAK,OAAO,KAAK,CAAC,CAAC,GAAG;AACpE,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,aAAa,aAChB,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,CAAC,WAAW,OAAO,eAAe,MAAM,EAC/C,IAAI,CAAC,WAAW,OAAO,OAAO,IAAI,CAAC;AAEtC,QAAM,aAAa,WAAW,KAAK,CAAC,UAAU,kBAAkB,KAAK,KAAK,CAAC;AAC3E,QAAM,YAAY,WAAW,KAAK,CAAC,UAAU,iBAAiB,KAAK,KAAK,CAAC;AACzE,QAAM,YAAY,WAAW,KAAK,CAAC,UAAU,iBAAiB,KAAK,KAAK,CAAC;AACzE,QAAM,aAAa,WAAW,KAAK,CAAC,UAAU,4BAA4B,KAAK,KAAK,CAAC;AACrF,QAAM,UAAU,WACb,IAAI,CAAC,UAAU,MAAM,MAAM,2BAA2B,CAAC,EACvD,KAAK,OAAO;AACf,QAAM,gBAAgB,WAAW,SAAS,UAAU,KAAK,QAAQ,OAAO;AAExE,QAAM,oBAAoB,CAAC,YAAY,aAAa,WAAW,eAAe,UAAU,EAAE,OAAO,OAAO,EAAE;AAC1G,QAAM,kBAAkB,qBAAqB;AAC7C,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,mBAAmB;AACvB,MAAI,WAAW;AACb,uBAAmB;AAAA,EACrB,WAAW,WAAW;AACpB,uBAAmB;AAAA,EACrB;AAEA,MAAI,eAAe;AACnB,MAAI,WAAW;AACb,mBAAe;AAAA,EACjB,WAAW,SAAS;AAClB,mBAAe,kCAAkC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAAA,EACzE,WAAW,eAAe;AACxB,mBAAe;AAAA,EACjB;AAEA,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB,CAAC;AACpB,GAAG;AACD,MAAI,kBAAkB,IAAI,OAAO,GAAG;AAClC,eAAW,SAAS,8BAA8B;AAClD,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,OAAO,kBAAkB,EAC3C,MAAM,KAAK,EACX,OAAO,OAAO;AAEjB,QAAM,eAAe,mBAAmB,cAAc,OAAO;AAC7D,QAAM,cAAc,kBAAkB,cAAc,SAAS,YAAY;AACzE,QAAM,aAAa,iBAAiB,cAAc,SAAS,cAAc,WAAW;AACpF,QAAM,eAAe,WAAW,KAAK,OAAO;AAC5C,QAAM,oBACJ,CAAC,KAAK,KAAK,EAAE,SAAS,OAAO,KAC7B,aAAa,KAAK,CAAC,UAAU,oBAAoB,KAAK,OAAO,SAAS,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC;AAEhH,QAAM,SAAS,oBAAI,IAAI;AACvB,QAAM,mBAAmB,CAAC;AAC1B,QAAM,mBAAmB,CAAC;AAC1B,MAAI,YAAY;AAChB,MAAI,mBAAmB;AACvB,MAAI,wBAAwB;AAC5B,MAAI,YAAY;AAChB,MAAI,mBAAmB;AAEvB,eAAa,QAAQ,CAAC,UAAU;AAC9B,UAAM,SAAS,kBAAkB,KAAK;AACtC,UAAM,OAAO,OAAO;AAEpB,QAAI,uBAAuB,KAAK,CAAC,YAAY,QAAQ,KAAK,IAAI,CAAC,GAAG;AAChE,cAAQ,WAAW;AACnB,iBAAW,SAAS,uBAAuB;AAC3C;AAAA,IACF;AAEA,UAAM,YAAY,eAAe,KAAK,KAAK,eAAe,IAAI;AAE9D,QAAI,WAAW;AACb,cAAQ,iBAAiB;AAAA,IAC3B;AAEA,QAAI,YAAY,KAAK,IAAI,GAAG;AAC1B,kBAAY;AACZ,yBAAmB,oBAAoB;AACvC,8BAAwB,yBAAyB,2BAA2B,KAAK;AACjF,cAAQ,WAAW;AACnB,iBAAW,SAAS,iCAAiC;AACrD;AAAA,IACF;AAEA,QAAI,YAAY,KAAK,IAAI,GAAG;AAC1B,YAAM,YAAY,OAAO,IAAI,EAAE,MAAM,iBAAiB;AACtD,UAAI,WAAW;AACb,cAAM,aAAa,OAAO,UAAU,CAAC,CAAC;AACtC,cAAM,YAAY,QAAQ,IAAI,UAAU;AACxC,YAAI,aAAa,WAAW,QAAQ,SAAS,GAAG;AAC9C,iBAAO,IAAI,SAAS;AACpB,sBAAY;AACZ,6BAAmB,oBAAoB;AACvC,kBAAQ,UAAU;AAClB,kBAAQ,cAAc;AACtB,qBAAW,SAAS,+BAA+B;AACnD;AAAA,QACF;AAAA,MACF;AACA,cAAQ,WAAW;AACnB,iBAAW,SAAS,sBAAsB;AAC1C;AAAA,IACF;AAEA,QAAI,kBAAkB,KAAK,IAAI,KAAK,OAAO,eAAe,QAAQ;AAChE,YAAM,OAAO,iBAAiB,IAAI;AAClC,UAAI,OAAO,SAAS,IAAI,KAAK,WAAW,QAAQ,MAAM,GAAG;AACvD,yBAAiB,OAAO,UAAU,IAAI;AACtC,gBAAQ,UAAU;AAClB,mBAAW,SAAS,uCAAuC;AAC3D;AAAA,MACF;AACA,UAAI,CAAC,WAAW,QAAQ,MAAM,GAAG;AAC/B,gBAAQ,iBAAiB;AACzB,gBAAQ,SAAS,sEAAsE;AACvF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,qBAAqB,KAAK,IAAI,KAAK,OAAO,eAAe,QAAQ;AACnE,UAAI,WAAW,QAAQ,MAAM,GAAG;AAC9B,yBAAiB,OAAO,UAAU,IAAI;AACtC,gBAAQ,UAAU;AAClB,mBAAW,SAAS,4BAA4B;AAChD;AAAA,MACF;AACA,cAAQ,iBAAiB;AACzB,cAAQ,SAAS,sEAAsE;AACvF;AAAA,IACF;AAEA,QAAI,kBAAkB,KAAK,IAAI,KAAK,OAAO,eAAe,QAAQ;AAChE,YAAM,OAAO,iBAAiB,IAAI;AAClC,UAAI,OAAO,SAAS,IAAI,KAAK,WAAW,QAAQ,MAAM,GAAG;AACvD,yBAAiB,OAAO;AAAA,MAC1B;AAAA,IACF;AAEA,UAAM,aAAa,WAAW,IAAI,IAAI;AACtC,QAAI,cAAc,OAAO,eAAe,QAAQ;AAC9C,UAAI,CAAC,WAAW,QAAQ,WAAW,IAAI,GAAG;AACxC,gBAAQ,iBAAiB;AACzB,gBAAQ,SAAS,WAAW,IAAI,6BAA6B,WAAW,IAAI,SAAS;AACrF;AAAA,MACF;AACA,iBAAW,IAAI,QAAQ,CAAC,cAAc;AACpC,YAAI;AAAW,iBAAO,IAAI,SAAS;AAAA,MACrC,CAAC;AACD,cAAQ,UAAU;AAClB,iBAAW,SAAS,WAAW,EAAE;AACjC;AAAA,IACF;AAEA,QAAI,QAAQ,IAAI,IAAI,KAAK,OAAO,eAAe,QAAQ;AACrD,UAAI,CAAC,WAAW,QAAQ,SAAS,GAAG;AAClC,gBAAQ,iBAAiB;AACzB,gBAAQ,SAAS,6DAA6D;AAC9E;AAAA,MACF;AACA,aAAO,IAAI,QAAQ,IAAI,IAAI,CAAC;AAC5B,cAAQ,UAAU;AAClB,iBAAW,SAAS,0BAA0B;AAC9C;AAAA,IACF;AAEA,QAAI,cAAc,IAAI,IAAI,KAAK,OAAO,eAAe,QAAQ;AAC3D,UAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AACpC,gBAAQ,iBAAiB;AACzB,gBAAQ,SAAS,qEAAqE;AACtF;AAAA,MACF;AACA,aAAO,IAAI,cAAc,IAAI,IAAI,CAAC;AAClC,cAAQ,UAAU;AAClB,iBAAW,SAAS,4BAA4B;AAChD;AAAA,IACF;AAEA,QAAI,aAAa,mBAAmB,WAAW;AAC7C,YAAM,aAAa,OAAO,QAAQ,EAAE;AAEpC,UAAI,OAAO,eAAe,UAAU,CAAC,UAAU,QAAQ,WAAW,EAAE,SAAS,UAAU,GAAG;AACxF,eAAO,IAAI,MAAM;AACjB,gBAAQ,UAAU;AAClB,gBAAQ,cAAc;AACtB,mBAAW,SAAS,qCAAqC;AACzD;AAAA,MACF;AAEA,YAAM,0BACJ;AACF,YAAM,+BACJ,wBAAwB,KAAK,UAAU,KAAK,WAAW,WAAW,QAAQ;AAE5E,UAAI,8BAA8B;AAChC,gBAAQ,WAAW;AACnB,mBAAW,SAAS,mCAAmC;AACvD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,cAAc;AAChB,YAAM,kCACJ;AACF,UAAI,gCAAgC,KAAK,IAAI,GAAG;AAC9C,gBAAQ,WAAW;AACnB,gBAAQ,cAAc;AACtB,mBAAW,SAAS,oCAAoC;AACxD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,YAAY,mBAAmB,WAAW;AAC5C,YAAM,aAAa,OAAO,QAAQ,EAAE;AACpC,YAAM,yBACJ;AACF,UAAI,uBAAuB,KAAK,UAAU,KAAK,WAAW,WAAW,QAAQ,GAAG;AAC9E,gBAAQ,WAAW;AACnB,mBAAW,SAAS,kCAAkC;AACtD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,mBAAmB,WAAW;AAC3C,YAAM,aAAa,OAAO,QAAQ,EAAE;AACpC,YAAM,wBACJ;AACF,UAAI,sBAAsB,KAAK,UAAU,KAAK,WAAW,WAAW,QAAQ,GAAG;AAC7E,gBAAQ,WAAW;AACnB,mBAAW,SAAS,iCAAiC;AACrD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,2BAA2B,mCAAmC,IAAI;AACxE,QAAI,4BAA4B,OAAO,eAAe,QAAQ;AAC5D,aAAO,IAAI,wBAAwB;AACnC,cAAQ,UAAU;AAClB,cAAQ,cAAc;AACtB,iBAAW,SAAS,yCAAyC;AAC7D;AAAA,IACF;AAEA,UAAM,mBAAmB,mDAAmD,KAAK,IAAI;AACrF,QAAI,kBAAkB;AACpB,YAAM,6BACJ,qBACC,YAAY,OAAO,CAAC,aAAa;AAEpC,UAAI,4BAA4B;AAC9B,cAAM,uBAAuB,wBAAwB,MAAM,OAAO,YAAY,OAAO,QAAQ;AAC7F,YAAI,sBAAsB;AACxB,gBAAM,YAAY;AAAA,YAChB;AAAA,YACA,GAAG,OAAO,UAAU,IAAI;AAAA,YACxB,qBAAqB;AAAA,YACrB,qBAAqB;AAAA,YACrB,qBAAqB;AAAA,UACvB;AACA,cAAI,WAAW;AACb,mBAAO,IAAI,SAAS;AACpB,oBAAQ,UAAU;AAClB,oBAAQ,cAAc;AACtB,uBAAW,SAAS,oBAAoB,+BAA+B,wCAAwC;AAC/G;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,WAAW;AACnB,iBAAW,SAAS,aAAa;AACjC;AAAA,IACF;AAEA,UAAM,cAAc,wBAAwB,MAAM,OAAO,YAAY,OAAO,QAAQ;AACpF,QAAI,aAAa;AACf,YAAM,YAAY;AAAA,QAChB;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,MACd;AACA,UAAI,WAAW;AACb,eAAO,IAAI,SAAS;AACpB,gBAAQ,UAAU;AAClB,gBAAQ,cAAc;AACtB,mBAAW,SAAS,YAAY,MAAM;AACtC,YAAI,OAAO,eAAe,QAAQ;AAChC,kBAAQ,SAAS,4CAA4C,KAAK,GAAG;AAAA,QACvE;AACA;AAAA,MACF;AAAA,IACF;AAEA,eAAW,cAAc,sBAAsB,iBAAiB;AAC9D,UAAI,WAAW,QAAQ,KAAK,IAAI,GAAG;AACjC,gBAAQ,WAAW;AACnB,mBAAW,SAAS,WAAW,EAAE;AACjC,YAAI,WAAW,OAAO,wBAAwB;AAC5C,kBAAQ,6BAA6B;AAAA,QACvC;AACA,YAAI,WAAW,OAAO,4BAA4B;AAChD,kBAAQ,iCAAiC;AAAA,QAC3C;AACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW;AACb,cAAQ,WAAW;AACnB,sBAAgB,SAAS,KAAK;AAC9B;AAAA,IACF;AAEA,WAAO,IAAI,KAAK;AAAA,EAClB,CAAC;AAED,MAAI,aAAa,WAAW,QAAQ,SAAS,GAAG;AAC9C,WAAO,IAAI,yBAAyB,UAAU;AAC9C,YAAQ,UAAU;AAClB,YAAQ,cAAc;AACtB,YAAQ,SAAS,UAAU,gBAAgB,OAAO,yBAAyB,UAAU,GAAG;AAAA,EAC1F;AAEA,MAAI,aAAa,WAAW,QAAQ,SAAS,GAAG;AAC9C,YAAQ,SAAS,UAAU,gBAAgB,kBAAkB;AAAA,EAC/D;AAEA,QAAM,iBAAiB,oBAAoB,gBAAgB;AAC3D,MAAI,kBAAkB,WAAW,QAAQ,MAAM,GAAG;AAChD,WAAO,OAAO,aAAa;AAC3B,WAAO,OAAO,aAAa;AAC3B,WAAO,OAAO,aAAa;AAC3B,WAAO,OAAO,aAAa;AAC3B,WAAO,OAAO,aAAa;AAC3B,WAAO,IAAI,MAAM;AACjB,WAAO,IAAI,cAAc;AACzB,YAAQ,cAAc;AACtB,eAAW,SAAS,uCAAuC;AAC3D,YAAQ,SAAS,wCAAwC,cAAc,GAAG;AAAA,EAC5E,WAAW,WAAW,QAAQ,MAAM,GAAG;AACrC,UAAM,4BAA4B,iBAAiB;AAAA,MACjD,CAAC,OAAO,OAAO,UAAU,OAAO,SAAS,iBAAiB,EAAE,CAAC;AAAA,IAC/D;AAEA,8BAA0B,QAAQ,CAAC,OAAO;AACxC,YAAM,OAAO,iBAAiB,EAAE;AAChC,YAAM,eAAe,kCAAkC,IAAI,IAAI;AAE/D,UAAI,cAAc;AAChB,eAAO,IAAI,MAAM;AACjB,eAAO,IAAI,YAAY;AACvB,gBAAQ,cAAc;AACtB,mBAAW,SAAS,uCAAuC;AAC3D,gBAAQ,SAAS,UAAU,EAAE,cAAc,IAAI,OAAO,YAAY,GAAG;AACrE;AAAA,MACF;AAEA,YAAM,gBAAgB;AAAA,QACpB;AAAA,QACA,aAAa,IAAI;AAAA,QACjB,gCAAgC,IAAI;AAAA,QACpC;AAAA,MACF;AACA,UAAI,eAAe;AACjB,eAAO,IAAI,MAAM;AACjB,eAAO,IAAI,aAAa;AACxB,gBAAQ,cAAc;AACtB,mBAAW,SAAS,4CAA4C;AAChE,gBAAQ,SAAS,UAAU,EAAE,cAAc,IAAI,mDAAmD;AAAA,MACpG;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MACE,WAAW,QAAQ,MAAM,KACzB,aAAa,SAAS,UAAU,MAC/B,iBAAiB,OAAO,cAAc,iBAAiB,OAAO,aAC/D;AACA,WAAO,OAAO,UAAU;AACxB,WAAO,OAAO,UAAU;AACxB,WAAO,IAAI,cAAc;AACzB,YAAQ,cAAc;AACtB,eAAW,SAAS,4BAA4B;AAChD,YAAQ,SAAS,wDAAwD;AAAA,EAC3E;AAEA,QAAM,qBAAqB,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,aAAa;AACzE,MAAI,sBAAsB,WAAW,QAAQ,SAAS,GAAG;AACvD,UAAM,qBAAqB,mBAAmB,MAAM,KAAK,qBAAqB,MAAM,KAAK,aAAa;AACtG,QAAI,CAAC,oBAAoB;AACvB,aAAO,IAAI,QAAQ;AACnB,cAAQ,cAAc;AACtB,iBAAW,SAAS,6BAA6B;AACjD,cAAQ,SAAS,oEAAoE;AAAA,IACvF;AAAA,EACF;AAEA,QAAM,oBAAoB,aAAa,KAAK,CAAC,UAAU,kBAAkB,KAAK,kBAAkB,KAAK,EAAE,IAAI,CAAC;AAC5G,MAAI,qBAAqB,OAAO,IAAI,MAAM,KAAK,CAAC,mBAAmB,MAAM,GAAG;AAC1E,UAAM,aAAa,oBAAoB,gBAAgB;AACvD,QAAI,YAAY;AACd,aAAO,IAAI,UAAU;AACrB,cAAQ,cAAc;AACtB,iBAAW,SAAS,uCAAuC;AAC3D,cAAQ,SAAS,gCAAgC,UAAU,6BAA6B;AAAA,IAC1F,WAAW,OAAO,SAAS,iBAAiB,IAAI,KAAK,iBAAiB,OAAO,GAAG;AAC9E,aAAO,IAAI,aAAa,iBAAiB,IAAI,EAAE;AAC/C,cAAQ,cAAc;AACtB,iBAAW,SAAS,oCAAoC;AACxD,cAAQ,SAAS,0CAA0C,iBAAiB,IAAI,oCAAoC;AAAA,IACtH,OAAO;AACL,aAAO,IAAI,cAAc;AACzB,cAAQ,cAAc;AACtB,iBAAW,SAAS,iDAAiD;AACrE,cAAQ,SAAS,uGAAuG;AAAA,IAC1H;AAAA,EACF;AAEA,QAAM,mBAAmB,aAAa,KAAK,CAAC,UAAU,4CAA4C,KAAK,KAAK,CAAC;AAC7G,QAAM,qBAAqB,aAAa,KAAK,CAAC,UAAU,WAAW,KAAK,KAAK,CAAC;AAC9E,QAAM,iBAAiB,CAAC,OAAO,WAAW,WAAW,MAAM,OAAO,EAAE,SAAS,OAAO;AACpF,MAAI,kBAAkB,oBAAoB,oBAAoB;AAC5D,WAAO,IAAI,MAAM;AACjB,QAAI,CAAC,OAAO,IAAI,kBAAkB,KAAK,aAAa,KAAK,CAAC,UAAU,UAAU,KAAK,KAAK,CAAC,GAAG;AAC1F,aAAO,IAAI,kBAAkB;AAAA,IAC/B;AACA,QAAI,CAAC,OAAO,IAAI,cAAc,KAAK,aAAa,SAAS,UAAU,GAAG;AACpE,aAAO,IAAI,cAAc;AAAA,IAC3B;AACA,YAAQ,cAAc;AACtB,eAAW,SAAS,uBAAuB;AAAA,EAC7C;AAEA,QAAM,eAAe,YAAY,YAAY,YAAY;AACzD,MAAI,cAAc;AAChB,UAAM,mBAAmB,aAAa,KAAK,CAAC,UAAU,4BAA4B,KAAK,KAAK,CAAC,KAAK,aAAa,SAAS,YAAY;AACpI,UAAM,mBAAmB,aAAa,KAAK,CAAC,UAAU,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC;AACjF,UAAM,mBAAmB,aAAa,SAAS,KAAK,KAAK,aAAa,SAAS,cAAc;AAE7F,QAAI,kBAAkB;AACpB,aAAO,OAAO,cAAc;AAC5B,aAAO,OAAO,kBAAkB;AAChC,aAAO,IAAI,aAAa;AACxB,cAAQ,cAAc;AACtB,iBAAW,SAAS,iCAAiC;AAAA,IACvD,WAAW,kBAAkB;AAC3B,aAAO,IAAI,aAAa;AACxB,cAAQ,cAAc;AACtB,iBAAW,SAAS,iCAAiC;AAAA,IACvD;AAEA,QAAI,kBAAkB;AACpB,aAAO,IAAI,WAAW;AACtB,iBAAW,SAAS,mCAAmC;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,aAAa,iBAAiB;AAChC,eAAW,aAAa,MAAM,KAAK,MAAM,GAAG;AAC1C,UAAI,OAAO,SAAS,EAAE,WAAW,SAAS,GAAG;AAC3C,eAAO,OAAO,SAAS;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,0BAA0B;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,4BAAwB,QAAQ,CAAC,SAAS,OAAO,OAAO,IAAI,CAAC;AAE7D,QAAI,aAAa,YAAY,WAAW;AACtC,aAAO,IAAI,aAAa;AACxB,iBAAW,SAAS,iCAAiC;AAAA,IACvD,WAAW,aAAa,YAAY,WAAW;AAC7C,aAAO,IAAI,aAAa;AACxB,iBAAW,SAAS,iCAAiC;AAAA,IACvD;AAEA,QAAI,aAAa,SAAS,MAAM;AAC9B,aAAO,IAAI,QAAQ;AACnB,iBAAW,SAAS,iCAAiC;AAAA,IACvD,WAAW,aAAa,SAAS,MAAM;AACrC,aAAO,IAAI,QAAQ;AACnB,iBAAW,SAAS,iCAAiC;AAAA,IACvD;AAEA,QAAI,aAAa,UAAU;AACzB,aAAO,IAAI,WAAW;AACtB,iBAAW,SAAS,mCAAmC;AAAA,IACzD;AAEA,YAAQ,cAAc;AACtB,eAAW,SAAS,mCAAmC;AAAA,EACzD;AAEA,MAAI,YAAY,iBAAiB;AAC/B,eAAW,aAAa,MAAM,KAAK,MAAM,GAAG;AAC1C,UAAI,OAAO,SAAS,EAAE,WAAW,SAAS,GAAG;AAC3C,eAAO,OAAO,SAAS;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,yBAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,2BAAuB,QAAQ,CAAC,SAAS,OAAO,OAAO,IAAI,CAAC;AAE5D,WAAO,IAAI,OAAO;AAClB,QAAI,YAAY,cAAc;AAC5B,aAAO,IAAI,YAAY,YAAY;AAAA,IACrC;AACA,QAAI,YAAY,SAAS;AACvB,aAAO,IAAI,eAAe;AAAA,IAC5B;AACA,QAAI,YAAY,WAAW;AACzB,aAAO,IAAI,YAAY,SAAS;AAAA,IAClC;AAEA,QAAI,YAAY,UAAU,YAAY,OAAO,QAAQ;AACnD,YAAM,QAAQ;AAAA,QACZ,YAAY,OAAO;AAAA,QACnB,OAAO,YAAY,OAAO,WAAW,GAAG;AAAA,MAC1C;AACA,YAAM,UAAU;AAAA,QACd,YAAY,OAAO;AAAA,QACnB,OAAO,YAAY,OAAO,aAAa,GAAG;AAAA,MAC5C;AAEA,UAAI,SAAS,SAAS;AACpB,cAAM,cAAc,gBAAgB,YAAY,OAAO,MAAM,IAAI,YAAY,OAAO,OAAO,IAAI,YAAY,OAAO,SAAS;AAC3H,cAAM,cAAc;AAAA,UAClB;AAAA,UACA;AAAA,UACA,oBAAoB,KAAK,UAAU,OAAO;AAAA,UAC1C;AAAA,QACF;AACA,YAAI,aAAa;AACf,iBAAO,IAAI,WAAW;AACtB,qBAAW,SAAS,wCAAwC;AAC5D,kBAAQ,SAAS,qCAAqC,WAAW,GAAG;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,cAAc;AACtB,eAAW,SAAS,kCAAkC;AACtD,YAAQ,SAAS,6DAA6D;AAAA,EAChF;AAEA,MAAI,WAAW,iBAAiB;AAC9B,eAAW,aAAa,MAAM,KAAK,MAAM,GAAG;AAC1C,UAAI,OAAO,SAAS,EAAE,WAAW,SAAS,GAAG;AAC3C,eAAO,OAAO,SAAS;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,wBAAwB;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,0BAAsB,QAAQ,CAAC,SAAS,OAAO,OAAO,IAAI,CAAC;AAE3D,WAAO,IAAI,MAAM;AACjB,QAAI,WAAW,kBAAkB;AAC/B,aAAO,IAAI,WAAW,gBAAgB;AAAA,IACxC;AACA,QAAI,WAAW,cAAc;AAC3B,aAAO,IAAI,WAAW,YAAY;AAAA,IACpC;AAEA,YAAQ,cAAc;AACtB,eAAW,SAAS,iCAAiC;AACrD,YAAQ,SAAS,8DAA8D;AAAA,EACjF;AAEA,MAAI,YAAY,OAAO,CAAC,aAAa,iBAAiB;AACpD,UAAM,gBAAgB,aAAa;AAAA,MACjC,CAAC,UAAU,MAAM,SAAS,YAAY,KAAK,UAAU;AAAA,IACvD;AACA,QAAI,eAAe;AACjB,YAAM,iBAAiB,oBAAoB,SAAS,cAAc,sBAAsB;AACxF,UAAI,gBAAgB;AAClB,eAAO,IAAI,cAAc;AAAA,MAC3B;AACA,cAAQ,cAAc;AACtB,iBAAW,SAAS,kCAAkC;AAAA,IACxD;AAAA,EACF;AAEA,MAAI,YAAY,UAAU;AACxB,UAAM,yBAAyB,OAAO,IAAI,cAAc,KAAK,aAAa,KAAK,CAAC,UAAU,OAAO,KAAK,KAAK,CAAC;AAC5G,QAAI,wBAAwB;AAC1B,aAAO,OAAO,cAAc;AAC5B,aAAO,OAAO,gBAAgB;AAC9B,aAAO,IAAI,iBAAiB;AAC5B,cAAQ,cAAc;AACtB,iBAAW,SAAS,+BAA+B;AAAA,IACrD;AAAA,EACF;AAEA,MAAI,gBAAgB,aAAa,CAAC,MAAM,MAAM,MAAM,EAAE,SAAS,OAAO,GAAG;AACvE,UAAM,iBAAiB,oBAAoB,SAAS,cAAc,oCAAoC;AACtG,QAAI,gBAAgB;AAClB,aAAO,IAAI,cAAc;AACzB,cAAQ,cAAc;AACtB,iBAAW,SAAS,6BAA6B;AAAA,IACnD;AAAA,EACF;AAEA,MAAI,gBAAgB,eAAe,YAAY,OAAO,CAAC,aAAa,iBAAiB;AACnF,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,kBAAkB;AACpB,aAAO,IAAI,gBAAgB;AAC3B,cAAQ,cAAc;AACtB,iBAAW,SAAS,+BAA+B;AAAA,IACrD;AAAA,EACF;AAEA,QAAM,wBAAwB,oBAAI,IAAI,CAAC,OAAO,WAAW,WAAW,SAAS,OAAO,QAAQ,UAAU,UAAU,QAAQ,YAAY,MAAM,MAAM,IAAI,CAAC;AACrJ,QAAM,qCAAqC,aAAa,KAAK,CAAC,UAAU;AACtE,UAAM,YAAY,kBAAkB,KAAK,EAAE;AAC3C,WAAO,kGAAkG,KAAK,SAAS;AAAA,EACzH,CAAC;AACD,MAAI,OAAO,SAAS,KAAK,sBAAsB,IAAI,OAAO,KAAK,oCAAoC;AACjG,WAAO,IAAI,UAAU;AACrB,YAAQ,SAAS,gCAAgC,OAAO,0BAA0B;AAAA,EACpF;AAEA,SAAO,MAAM,KAAK,MAAM,EAAE,KAAK,GAAG;AACpC;AAEA,SAAS,qBAAqB,OAAO,IAAI,UAAU,CAAC,GAAG;AACrD,QAAM,SAAS,OAAO,QAAQ,EAAE;AAChC,QAAM,SAAS,wBAAwB,QAAQ,UAAU,CAAC,CAAC;AAC3D,QAAM,cAAc,mBAAmB,QAAQ,UAAU,CAAC,CAAC;AAC3D,QAAM,UAAU,wBAAwB;AACxC,QAAM,YAAY,8BAA8B,QAAQ,OAAO;AAC/D,QAAM,mBAAmB,sBAAsB,UAAU,MAAM,OAAO;AAEtE,QAAM,mBAAmB,iBAAiB;AAAA,IACxC;AAAA,IACA,CAAC,WAAW,SAAS,aAAa,OAAO,YAAY,eAAe;AAClE,YAAM,iBAAiB,sBAAsB;AAAA,QAC3C,SAAS,OAAO,WAAW,EAAE,EAAE,YAAY;AAAA,QAC3C,oBAAoB;AAAA,QACpB;AAAA,QACA;AAAA,QACA,gBAAgB,UAAU;AAAA,MAC5B,CAAC;AAED,YAAM,UAAU,OAAO,kBAAkB,EAAE,EAAE,KAAK;AAClD,UAAI,CAAC,SAAS;AACZ,eAAO,IAAI,OAAO,GAAG,WAAW,GAAG,UAAU;AAAA,MAC/C;AAEA,aAAO,IAAI,OAAO,GAAG,WAAW,UAAU,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU;AAAA,IAChF;AAAA,EACF;AAEA,QAAM,oBAAoB;AAAA,IACxB;AAAA,MACE;AAAA,QACE,yBAAyB,kBAAkB,OAAO;AAAA,QAClD;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,QAAQ,UAAU,CAAC,EAAE;AAAA,EACjC;AACA,QAAM,YAAY,6BAA6B,SAAS,WAAW;AACnE,QAAM,gBAAgB,uBAAuB,mBAAmB,SAAS;AACzE,MAAI,WAAW;AACb,YAAQ,SAAS,aAAa,QAAQ,kBAAkB,oCAAoC;AAAA,EAC9F;AAEA,MAAI,QAAQ,4BAA4B,KAAK,QAAQ,gCAAgC,GAAG;AACtF;AAAA,MACE;AAAA,MACA,+CAA+C,QAAQ,yBAAyB,iBAAiB,QAAQ,6BAA6B;AAAA,IACxI;AAAA,EACF;AAEA,QAAM,gBAAgB,qBAAqB,SAAS,EAAE;AACtD,QAAM,UAAU,QAAQ,SAAS,QAAQ,UAAU,QAAQ;AAC3D,QAAM,eAAe,QAAQ,gBAAgB,IAAI,UAAU,QAAQ,gBAAgB;AACnF,QAAM,eAAe,QAAQ,gBAAgB,IAAI,QAAQ,UAAU,QAAQ,gBAAgB;AAE3F,QAAM,gBACJ,OACA,eAAe,OACf,KAAK,IAAI,QAAQ,YAAY,CAAC,IAAI,QAClC,eAAe;AACjB,QAAM,aAAa,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,OAAO,cAAc,QAAQ,CAAC,CAAC,CAAC,CAAC;AAElF,QAAM,eAAe;AAAA,IACnB,wBAAwB,gBAAgB,eAAe,KAAK,MAAM,aAAa,GAAG,CAAC;AAAA,IACnF,wBAAwB,QAAQ,aAAa,WAAW,QAAQ,MAAM,YAAY,QAAQ,OAAO,kBAAkB,QAAQ,aAAa,YAAY,QAAQ,OAAO;AAAA,EACrK;AAEA,MAAI,cAAc,QAAQ;AACxB,iBAAa,KAAK,gCAAgC,cAAc,KAAK,IAAI,CAAC,EAAE;AAAA,EAC9E;AAEA,MAAI,QAAQ,MAAM,QAAQ;AACxB,iBAAa,KAAK,qBAAqB,QAAQ,MAAM,KAAK,KAAK,CAAC,EAAE;AAAA,EACpE;AAEA,QAAM,gBAAgB,QAAQ,aAAa,KAAK,aAAa,CAAC;AAAA,EAAS,aAAa;AAEpF,QAAM,SAAS,CAAC;AAChB,MAAI,QAAQ,UAAU,GAAG;AACvB,WAAO,KAAK;AAAA,MACV,UAAU;AAAA,MACV,SAAS,kBAAkB,QAAQ,OAAO;AAAA,IAC5C,CAAC;AAAA,EACH;AACA,MAAI,QAAQ,gBAAgB,GAAG;AAC7B,WAAO,KAAK;AAAA,MACV,UAAU;AAAA,MACV,SAAS,WAAW,QAAQ,aAAa;AAAA,IAC3C,CAAC;AAAA,EACH;AACA,MAAI,cAAc,QAAQ;AACxB,WAAO,KAAK;AAAA,MACV,UAAU;AAAA,MACV,SAAS,0BAA0B,cAAc,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,IACzE,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,MAAM;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU;AAAA,QACR,UAAU,QAAQ;AAAA,QAClB,QAAQ,QAAQ;AAAA,QAChB,SAAS,QAAQ;AAAA,QACjB,eAAe,QAAQ;AAAA,QACvB,SAAS,QAAQ;AAAA,QACjB,gBAAgB,QAAQ;AAAA,QACxB,kBAAkB,QAAQ;AAAA,MAC5B;AAAA,MACA,uBAAuB;AAAA,MACvB,OAAO,QAAQ;AAAA,MACf,cAAc,MAAM,KAAK,QAAQ,YAAY;AAAA,MAC7C;AAAA,MACA,0BAA0B,QAAQ,SAAS;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,kCAAkC;AAChD,SAAO;AAAA,IACL,eAAe;AAAA,IACf,GAAG;AAAA,IACH,gBAAgB,sBAAsB,eAAe,IAAI,CAAC,UAAU;AAAA,MAClE,IAAI,KAAK;AAAA,MACT,IAAI,KAAK;AAAA,MACT,KAAK,KAAK;AAAA,MACV,MAAM,KAAK,QAAQ;AAAA,IACrB,EAAE;AAAA,IACF,iBAAiB,sBAAsB,gBAAgB,IAAI,CAAC,UAAU;AAAA,MACpE,IAAI,KAAK;AAAA,MACT,SAAS,OAAO,KAAK,OAAO;AAAA,MAC5B,QAAQ,KAAK;AAAA,IACf,EAAE;AAAA,EACJ;AACF;AAEA,SAAS,kBAAkB,MAAM;AAC/B,QAAM,MAAM,OAAO,QAAQ,EAAE,EAAE,MAAM,sCAAsC;AAC3E,SAAO,MAAM,IAAI,CAAC,IAAI;AACxB;AAEA,SAAS,WAAW,OAAO;AACzB,SAAO,OAAO,SAAS,EAAE,EACtB,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,OAAO;AAC5B;AAEA,SAAS,aAAa,OAAO;AAC3B,SAAO,mBAAmB,KAAK,OAAO,SAAS,EAAE,CAAC;AACpD;AAEA,SAAS,WAAW,OAAO;AACzB,QAAM,OAAO,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY;AACpD,MAAI,CAAC;AAAM,WAAO;AAClB,QAAM,UAAU,OAAO,WAAW,IAAI;AACtC,MAAI,CAAC,OAAO,SAAS,OAAO;AAAG,WAAO;AACtC,MAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,IAAI;AAAG,WAAO,UAAU;AAClE,MAAI,KAAK,SAAS,IAAI,KAAK,cAAc,KAAK,IAAI;AAAG,WAAO;AAC5D,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAO;AAChC,QAAM,OAAO,OAAO,SAAS,EAAE,EAAE,KAAK;AACtC,MAAI,CAAC;AAAM,WAAO;AAClB,QAAM,WAAW,KAAK,MAAM,uBAAuB;AACnD,MAAI;AAAU,WAAO,SAAS,CAAC,EAAE,YAAY;AAC7C,QAAM,WAAW,KAAK,MAAM,iBAAiB;AAC7C,MAAI;AAAU,WAAO,SAAS,CAAC;AAC/B,QAAM,WAAW,KAAK,MAAM,iBAAiB;AAC7C,MAAI;AAAU,WAAO,SAAS,CAAC;AAC/B,SAAO;AACT;AAEA,SAAS,wBAAwB,UAAU,IAAI;AAC7C,QAAM,OAAO,OAAO,WAAW,EAAE,EAAE,KAAK;AACxC,MAAI,CAAC,QAAQ,OAAO,WAAW,eAAe,OAAO,aAAa;AAAa,WAAO;AACtF,QAAM,OAAO,SAAS;AACtB,MAAI,CAAC;AAAM,WAAO;AAClB,QAAM,WAAW,OAAO,iBAAiB,IAAI;AAC7C,SAAO,OAAO,SAAS,iBAAiB,IAAI,KAAK,EAAE,EAAE,KAAK;AAC5D;AAEA,SAAS,yBAAyB,QAAQ,IAAI;AAC5C,QAAM,OAAO,OAAO,SAAS,EAAE,EAAE,KAAK;AACtC,QAAM,SAAS,kBAAkB,IAAI;AACrC,MAAI;AAAQ,WAAO;AAEnB,QAAM,WAAW,KAAK,MAAM,uCAAuC;AACnE,MAAI,CAAC;AAAU,WAAO;AACtB,QAAM,WAAW,wBAAwB,SAAS,CAAC,CAAC;AACpD,SAAO,kBAAkB,QAAQ;AACnC;AAEA,SAAS,sCAAsC,QAAQ,IAAI;AACzD,QAAM,MAAM,OAAO,SAAS,EAAE,EAAE,KAAK;AACrC,MAAI,CAAC;AAAK,WAAO;AACjB,QAAM,YAAY,IAAI,MAAM,GAAG,EAAE,IAAI,KAAK;AAE1C,MAAI,cAAc;AAAY,WAAO;AACrC,MAAI,cAAc;AAAY,WAAO;AAErC,QAAM,aAAa,UAAU,MAAM,wBAAwB;AAC3D,MAAI,YAAY;AACd,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;AAClE,WAAO,cAAc,KAAK;AAAA,EAC5B;AAEA,QAAM,YAAY,UAAU,MAAM,oBAAoB;AACtD,MAAI,WAAW;AACb,WAAO,kBAAkB,UAAU,CAAC,CAAC;AAAA,EACvC;AAEA,QAAM,cAAc,UAAU,MAAM,0BAA0B;AAC9D,MAAI,CAAC;AAAa,WAAO;AAEzB,QAAM,WAAW,8BAA8B,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;AAC7E,MAAI,CAAC;AAAU,WAAO;AACtB,SAAO,yBAAyB,QAAQ;AAC1C;AAEA,SAAS,yCAAyC,YAAY,IAAI;AAChE,QAAM,SAAS,OAAO,aAAa,EAAE,EAClC,MAAM,KAAK,EACX,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO;AAEjB,SAAO,OACJ,IAAI,CAAC,UAAU,sCAAsC,KAAK,CAAC,EAC3D,OAAO,OAAO;AACnB;AAEA,SAAS,mBAAmB,UAAU,IAAI;AACxC,QAAM,SAAS,CAAC;AAChB,QAAM,QAAQ,OAAO,WAAW,EAAE;AAClC,QAAM,QAAQ;AACd,MAAI,QAAQ,MAAM,KAAK,KAAK;AAC5B,SAAO,OAAO;AACZ,UAAM,WAAW,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK;AAC7C,UAAM,OAAO,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK;AACzC,QAAI,YAAY,MAAM;AACpB,aAAO,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,IAChC;AACA,YAAQ,MAAM,KAAK,KAAK;AAAA,EAC1B;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,WAAW,IAAI;AACzC,QAAM,OAAO,OAAO,YAAY,EAAE,EAAE,YAAY;AAChD,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,yEAAyE,KAAK,IAAI;AAC3F;AAEA,SAAS,cAAc,QAAQ,IAAI;AACjC,QAAM,QAAQ,OAAO,SAAS,EAAE,EAC7B,KAAK,EACL,MAAM,gFAAgF;AACzF,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,IAAI,OAAO,WAAW,MAAM,CAAC,CAAC;AACpC,QAAM,IAAI,OAAO,WAAW,MAAM,CAAC,CAAC;AACpC,QAAM,IAAI,OAAO,WAAW,MAAM,CAAC,CAAC;AACpC,QAAM,IAAI,MAAM,CAAC,KAAK,OAAO,IAAI,OAAO,WAAW,MAAM,CAAC,CAAC;AAC3D,MAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,OAAO,SAAS,GAAG,CAAC;AAAG,WAAO;AAC/D,SAAO;AAAA,IACL,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC;AAAA,IAC/B,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC;AAAA,IAC/B,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC;AAAA,IAC/B,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAAA,EAC/B;AACF;AAEA,SAAS,cAAc,QAAQ,IAAI;AACjC,QAAM,QAAQ,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,qBAAqB;AACpE,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,MAAM,MAAM,CAAC,EAAE,YAAY;AACjC,MAAI,IAAI,WAAW,GAAG;AACpB,UAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE;AAC9B,WAAO;AAAA,MACL,GAAG,OAAO,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AAAA,MACjC,GAAG,OAAO,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AAAA,MACjC,GAAG,OAAO,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AAAA,MACjC,GAAG;AAAA,IACL;AAAA,EACF;AACA,MAAI,IAAI,WAAW,KAAK,IAAI,WAAW,GAAG;AACxC,WAAO;AAAA,MACL,GAAG,OAAO,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,MACtC,GAAG,OAAO,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,MACtC,GAAG,OAAO,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,MACtC,GAAG,IAAI,WAAW,IAAI,OAAO,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,MAAM;AAAA,IACrE;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,QAAQ,IAAI;AAC/B,QAAM,aAAa,kBAAkB,KAAK;AAC1C,MAAI,CAAC;AAAY,WAAO;AACxB,MAAI,WAAW,WAAW,GAAG;AAAG,WAAO,cAAc,UAAU;AAC/D,MAAI,WAAW,WAAW,KAAK;AAAG,WAAO,cAAc,UAAU;AACjE,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAO;AAChC,MAAI,CAAC;AAAO,WAAO;AACnB,QAAM,UAAU,CAAC,UAAU;AACzB,UAAM,IAAI,OAAO,KAAK,IAAI;AAC1B,WAAO,KAAK,UAAU,IAAI,UAAU,IAAI,SAAS,UAAU;AAAA,EAC7D;AACA,QAAM,IAAI,QAAQ,MAAM,CAAC;AACzB,QAAM,IAAI,QAAQ,MAAM,CAAC;AACzB,QAAM,IAAI,QAAQ,MAAM,CAAC;AACzB,SAAO,SAAS,IAAI,SAAS,IAAI,SAAS;AAC5C;AAEA,SAAS,mBAAmB,QAAQ,IAAI;AACtC,QAAM,OAAO,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY;AACpD,MAAI,CAAC;AAAM,WAAO;AAClB,MAAI,SAAS;AAAe,WAAO;AACnC,QAAM,OAAO,YAAY,IAAI;AAC7B,MAAI,QAAQ,OAAO,SAAS,KAAK,CAAC;AAAG,WAAO,KAAK,KAAK;AACtD,SAAO;AACT;AAEA,SAAS,sBAAsB,iBAAiB,CAAC,GAAG,qBAAqB,CAAC,GAAG;AAC3E,QAAM,iBAAiB,eACpB,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,CAAC,UAAU,SAAS,CAAC,mBAAmB,KAAK,CAAC;AACxD,QAAM,aAAa,iBAAiB,cAAc;AAClD,MAAI,YAAY;AACd,WAAO,EAAE,OAAO,YAAY,QAAQ,OAAO;AAAA,EAC7C;AAEA,QAAM,qBAAqB,mBACxB,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,CAAC,UAAU,SAAS,CAAC,mBAAmB,KAAK,CAAC;AAExD,QAAM,iBAAiB,mBAAmB,OAAO,CAAC,UAAU;AAC1D,UAAM,OAAO,YAAY,KAAK;AAC9B,UAAM,MAAM,kBAAkB,IAAI;AAClC,WAAO,OAAO,SAAS,GAAG,IAAI,OAAO,OAAO;AAAA,EAC9C,CAAC;AAED,QAAM,eAAe,iBAAiB,cAAc;AACpD,MAAI,cAAc;AAChB,WAAO,EAAE,OAAO,cAAc,QAAQ,kBAAkB;AAAA,EAC1D;AAEA,QAAM,iBAAiB,iBAAiB,kBAAkB;AAC1D,MAAI,gBAAgB;AAClB,WAAO,EAAE,OAAO,gBAAgB,QAAQ,WAAW;AAAA,EACrD;AAEA,SAAO,EAAE,OAAO,IAAI,QAAQ,OAAO;AACrC;AAEA,SAAS,qBAAqB,MAAM,MAAM,oBAAI,IAAI,GAAG;AACnD,QAAM,QAAQ,OAAO,QAAQ,EAAE;AAC/B,QAAM,QAAQ;AACd,MAAI,QAAQ,MAAM,KAAK,KAAK;AAC5B,SAAO,OAAO;AACZ,UAAM,OAAO,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY;AACvD,UAAM,QAAQ,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK;AAC1C,QAAI,QAAQ,OAAO;AACjB,UAAI,CAAC,IAAI,IAAI,IAAI;AAAG,YAAI,IAAI,MAAM,CAAC,CAAC;AACpC,UAAI,IAAI,IAAI,EAAE,KAAK,KAAK;AAAA,IAC1B;AACA,YAAQ,MAAM,KAAK,KAAK;AAAA,EAC1B;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,WAAW,IAAI;AACzC,QAAM,QAAQ,OAAO,YAAY,EAAE;AACnC,QAAM,eAAe,oBAAI,IAAI;AAC7B,QAAM,cAAc,CAAC;AACrB,QAAM,uBAAuB,CAAC;AAC9B,QAAM,4BAA4B,CAAC;AACnC,QAAM,wBAAwB,CAAC;AAC/B,QAAM,yBAAyB,CAAC;AAChC,QAAM,cAAc,CAAC;AACrB,QAAM,aAAa,CAAC;AAEpB,QAAM,aAAa;AACnB,QAAM,aAAa,CAAC,SAAS;AAC3B,UAAM,UAAU,OAAO,QAAQ,EAAE,EAAE,MAAM,UAAU,KAAK,CAAC;AACzD,YAAQ,QAAQ,CAAC,SAAS;AACxB,YAAM,aAAa,kBAAkB,IAAI;AACzC,UAAI;AAAY,oBAAY,KAAK,UAAU;AAAA,IAC7C,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,cAAc,eAAe,aAAa,KAAK,GAAG;AAC3D,QAAI;AACF,YAAM,SAAS,IAAI,UAAU;AAC7B,YAAM,MAAM,OAAO,gBAAgB,OAAO,WAAW;AACrD,YAAM,SAAS,MAAM,KAAK,IAAI,iBAAiB,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,eAAe,EAAE;AAC7F,aAAO,QAAQ,CAAC,cAAc;AAC5B,6BAAqB,WAAW,YAAY;AAC5C,mBAAW,SAAS;AACpB,2BAAmB,SAAS,EAAE,QAAQ,CAAC,UAAU;AAC/C,cAAI,CAAC,mBAAmB,MAAM,QAAQ;AAAG;AACzC,gBAAM,mBAAmB,qBAAqB,MAAM,MAAM,oBAAI,IAAI,CAAC;AACnE,gBAAM,aAAa,qBAAqB,kBAAkB,CAAC,cAAc,kBAAkB,CAAC,EACzF,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,OAAO;AACjB,+BAAqB,KAAK,GAAG,UAAU;AAAA,QACzC,CAAC;AAAA,MACH,CAAC;AAED,YAAM,cAAc,MAAM,KAAK,IAAI,iBAAiB,SAAS,CAAC;AAC9D,kBAAY,QAAQ,CAAC,SAAS;AAC5B,cAAM,cAAc,KAAK,aAAa,OAAO,KAAK;AAClD,6BAAqB,aAAa,YAAY;AAC9C,mBAAW,WAAW;AAAA,MACxB,CAAC;AAED,YAAM,sBAAsB,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,OAAO;AACrF,0BAAoB,QAAQ,CAAC,aAAa;AACxC,cAAM,WAAW,IAAI,cAAc,QAAQ;AAC3C,YAAI,CAAC;AAAU;AACf,cAAM,cAAc,SAAS,aAAa,OAAO,KAAK;AACtD,YAAI,CAAC;AAAa;AAClB,cAAM,mBAAmB,qBAAqB,aAAa,oBAAI,IAAI,CAAC;AACpE,cAAM,aAAa,qBAAqB,kBAAkB,CAAC,cAAc,kBAAkB,CAAC,EACzF,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,OAAO;AACjB,6BAAqB,KAAK,GAAG,UAAU;AAEvC,cAAM,cAAc,yCAAyC,SAAS,aAAa,OAAO,KAAK,EAAE;AACjG,kCAA0B,KAAK,GAAG,WAAW;AAAA,MAC/C,CAAC;AAED,YAAM,aAAa,MAAM,KAAK,IAAI,iBAAiB,SAAS,CAAC;AAC7D,iBAAW,QAAQ,CAAC,SAAS;AAC3B,cAAM,SAAS,iBAAiB,KAAK,aAAa,OAAO,KAAK,EAAE;AAChE,oBAAY,KAAK,GAAG,MAAM;AAC1B,cAAM,cAAc,yCAAyC,KAAK,aAAa,OAAO,KAAK,EAAE;AAC7F,8BAAsB,KAAK,GAAG,WAAW;AAEzC,cAAM,UAAU,OAAO,KAAK,WAAW,EAAE,EAAE,YAAY;AACvD,cAAM,eAAe,YAAY,YAAY,YAAY;AACzD,cAAM,cAAc,OAAO,KAAK,CAAC,UAAU,OAAO,KAAK,OAAO,kBAAkB,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnG,YAAI,gBAAgB,eAAe,YAAY,QAAQ;AACrD,iCAAuB,KAAK,GAAG,WAAW;AAAA,QAC5C;AAAA,MACF,CAAC;AAED,YAAM,OAAO,IAAI,MAAM,eAAe;AACtC,UAAI,KAAK,KAAK;AAAG,mBAAW,KAAK,IAAI;AACrC,iBAAW,IAAI,iBAAiB,aAAa,KAAK;AAAA,IACpD,SAAS,OAAO;AACd,2BAAqB,OAAO,YAAY;AACxC,iBAAW,KAAK;AAChB,iBAAW,KAAK,KAAK;AAAA,IACvB;AAAA,EACF,OAAO;AACL,yBAAqB,OAAO,YAAY;AACxC,eAAW,KAAK;AAChB,eAAW,KAAK,KAAK;AAAA,EACvB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,WAAW,KAAK,IAAI;AAAA,EAClC;AACF;AAEA,SAAS,iBAAiB,SAAS,CAAC,GAAG;AACrC,QAAM,SAAS,oBAAI,IAAI;AACvB,SAAO,QAAQ,CAAC,UAAU;AACxB,UAAM,MAAM,OAAO,SAAS,EAAE,EAAE,KAAK;AACrC,QAAI,CAAC;AAAK;AACV,WAAO,IAAI,MAAM,OAAO,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,EAC5C,CAAC;AACD,MAAI,SAAS;AACb,MAAI,cAAc;AAClB,SAAO,QAAQ,CAAC,OAAO,QAAQ;AAC7B,QAAI,QAAQ,aAAa;AACvB,eAAS;AACT,oBAAc;AAAA,IAChB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,qBAAqB,KAAK,YAAY,CAAC,GAAG;AACjD,SAAO,UAAU,QAAQ,CAAC,SAAS,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC;AACxD;AAEA,SAAS,oBAAoB,QAAQ,MAAM;AACzC,MAAI,CAAC,UAAU,CAAC;AAAM,WAAO;AAC7B,QAAM,WAAW,OAAO,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AACvD,MAAI,OAAO;AACX,aAAW,WAAW,UAAU;AAC9B,QAAI,CAAC,QAAQ,KAAK,SAAS,YAAY,CAAC,KAAK,cAAc,OAAO,KAAK,eAAe,UAAU;AAC9F,aAAO;AAAA,IACT;AACA,WAAO,KAAK,WAAW,OAAO;AAAA,EAChC;AACA,SAAO,QAAQ;AACjB;AAEA,SAAS,oBAAoB,SAAS,CAAC,GAAG;AACxC,QAAM,SAAS,UAAU,OAAO,WAAW,WAAW,SAAS,CAAC;AAChE,QAAM,YAAYC,MAAK,mBAAmB,OAAOA,KAAI,oBAAoB,WACrEA,KAAI,kBACJ,CAAC;AACL,QAAM,eAAe,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC;AAEnD,MAAI,SAAS;AACb,MAAI,OAAOA,MAAK,0BAA0B,YAAY;AACpD,QAAI;AACF,eAASA,KAAI,sBAAsB,MAAM,GAAG,UAAU;AAAA,IACxD,SAAS,OAAO;AACd,eAAS;AAAA,IACX;AAAA,EACF;AACA,MAAI,CAAC,UAAUA,MAAK,kBAAkB,QAAQ;AAC5C,aAASA,KAAI,iBAAiB;AAAA,EAChC;AAEA,SAAO,EAAE,QAAQ,QAAQ,aAAa;AACxC;AAEA,SAAS,mBAAmB,MAAM,OAAO;AACvC,MAAI,CAAC;AAAM,WAAO;AAElB,MAAI,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ;AAClD,UAAM,UAAU,KAAK,MAClB,IAAI,CAAC,SAAS,MAAM,KAAK,EACzB,OAAO,CAAC,SAAS,SAAS,UAAa,SAAS,IAAI;AACvD,QAAI,QAAQ,QAAQ;AAClB,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,UAAU,QAAQ;AAAA,UACtB,CAAC,WAAW,OAAO,MAAM,EAAE,YAAY,MAAM,MAAM,YAAY;AAAA,QACjE;AACA,YAAI,YAAY;AAAW,iBAAO;AAAA,MACpC;AACA,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,UAAU,QACb,IAAI,CAAC,WAAW,OAAO,MAAM,CAAC,EAC9B,OAAO,CAAC,WAAW,OAAO,SAAS,MAAM,CAAC;AAC7C,YAAI,QAAQ,QAAQ;AAClB,iBAAO,QAAQ,OAAO,CAAC,MAAM,YAC3B,KAAK,IAAI,UAAU,KAAK,IAAI,KAAK,IAAI,OAAO,KAAK,IAAI,UAAU,MAC9D,QAAQ,CAAC,CAAC;AAAA,QACf;AAAA,MACF;AACA,aAAO,QAAQ,CAAC;AAAA,IAClB;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,YAAY,KAAK,SAAS,WAAW;AACrD,UAAM,SAAS,OAAO,KAAK;AAC3B,QAAI,CAAC,OAAO,SAAS,MAAM;AAAG,aAAO;AACrC,WAAO,KAAK,SAAS,YAAY,KAAK,MAAM,MAAM,IAAI;AAAA,EACxD;AAEA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,QAAQ,KAAK;AAAA,EACtB;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO,OAAO,SAAS,EAAE,EAAE,KAAK;AAAA,EAClC;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,QAAQ,MAAM,OAAO;AACzC,QAAM,WAAW,OAAO,QAAQ,EAAE,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AAC7D,MAAI,CAAC,SAAS;AAAQ;AACtB,MAAI,UAAU;AACd,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS,GAAG;AACvD,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,UAAU,SAAS,SAAS,GAAG;AACjC,cAAQ,OAAO,IAAI;AACnB;AAAA,IACF;AACA,QAAI,CAAC,QAAQ,OAAO,KAAK,OAAO,QAAQ,OAAO,MAAM,YAAY,MAAM,QAAQ,QAAQ,OAAO,CAAC,GAAG;AAChG,cAAQ,OAAO,IAAI,CAAC;AAAA,IACtB;AACA,cAAU,QAAQ,OAAO;AAAA,EAC3B;AACF;AAEA,SAAS,sBAAsB,OAAO,MAAM,OAAO;AACjD,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU;AAAI;AAC3D,MAAI,MAAM,aAAa,QAAQ,CAAC,MAAM,aAAa,IAAI,IAAI;AAAG;AAE9D,QAAM,OAAO,oBAAoB,MAAM,QAAQ,IAAI;AACnD,QAAM,YAAY,mBAAmB,MAAM,KAAK;AAChD,MAAI,cAAc,UAAa,cAAc,QAAQ,cAAc;AAAI;AAEvE,eAAa,MAAM,OAAO,MAAM,SAAS;AACzC,QAAM,cAAc,IAAI,IAAI;AAC9B;AAEA,SAAS,gBAAgB,SAAS,CAAC,GAAG;AACpC,QAAM,OAAO,OACV,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,EAC9B,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC;AACzC,MAAI,CAAC,KAAK;AAAQ,WAAO;AACzB,OAAK,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AACzB,QAAM,SAAS,KAAK,MAAM,KAAK,SAAS,CAAC;AACzC,MAAI,KAAK,SAAS;AAAG,WAAO,KAAK,MAAM;AACvC,UAAQ,KAAK,SAAS,CAAC,IAAI,KAAK,MAAM,KAAK;AAC7C;AAEA,SAAS,gBAAgB,SAAS,CAAC,GAAG;AACpC,QAAM,UAAU,OACb,IAAI,CAAC,SAAS,OAAO,QAAQ,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,EACpD,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,QAAQ,gBAAgB,EAAE,CAAC,EACrD,OAAO,OAAO;AACjB,SAAO,iBAAiB,OAAO;AACjC;AAEA,SAAS,wBAAwB,SAAS;AACxC,QAAM,OAAO,OAAO,OAAO;AAC3B,MAAI,CAAC,OAAO,SAAS,IAAI;AAAG,WAAO;AACnC,MAAI,QAAQ;AAAM,WAAO;AACzB,MAAI,QAAQ;AAAK,WAAO;AACxB,MAAI,QAAQ;AAAK,WAAO;AACxB,SAAO;AACT;AAEA,SAAS,8BAA8B,QAAQ,IAAI;AACjD,QAAM,YAAY,OAAO,kBAAkB,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY;AAC1E,QAAM,QAAQ,UAAU,MAAM,oEAAoE;AAClG,MAAI,CAAC;AAAO,WAAO;AAEnB,QAAM,OAAO,MAAM,CAAC,KAAK;AACzB,QAAM,MAAM;AAAA,IACV,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAEA,MAAI,SAAS;AAAQ,WAAO;AAC5B,SAAO,OAAO,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI;AAClD;AAEA,SAAS,iCAAiC,cAAc,CAAC,GAAG;AAC1D,QAAM,eAAe,YAClB,IAAI,CAAC,UAAU,8BAA8B,KAAK,CAAC,EACnD,OAAO,CAAC,UAAU,OAAO,SAAS,KAAK,CAAC;AAC3C,MAAI,CAAC,aAAa;AAAQ,WAAO;AACjC,eAAa,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AACjC,QAAM,SAAS,KAAK,MAAM,aAAa,SAAS,CAAC;AACjD,MAAI,aAAa,SAAS;AAAG,WAAO,aAAa,MAAM;AACvD,UAAQ,aAAa,SAAS,CAAC,IAAI,aAAa,MAAM,KAAK;AAC7D;AAEO,SAAS,uBAAuB,QAAQ,CAAC,GAAG;AACjD,QAAM,OAAO,OAAO,MAAM,QAAQ,EAAE;AACpC,MAAI,CAAC,KAAK,KAAK,GAAG;AAChB,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM,OAAO,MAAM,cAAc,kBAAkB;AAAA,MACnD,YAAY;AAAA,MACZ,QAAQ,CAAC,EAAE,UAAU,WAAW,SAAS,4DAA4D,CAAC;AAAA,MACtG,aAAa,CAAC;AAAA,MACd,MAAM;AAAA,QACJ,oBAAoB;AAAA,QACpB,gBAAgB,CAAC;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,oBAAoB,MAAM,UAAU,CAAC,CAAC;AACtD,QAAM,UAAU,mBAAmB,IAAI;AACvC,QAAM,QAAQ;AAAA,IACZ,OAAO,CAAC;AAAA,IACR,eAAe,oBAAI,IAAI;AAAA,IACvB,cAAc,QAAQ;AAAA,IACtB,QAAQ,QAAQ;AAAA,EAClB;AAEA,QAAM,aAAa,qBAAqB,QAAQ,cAAc,CAAC,OAAO,CAAC,EACpE,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,OAAO;AACjB,QAAM,mBAAmB,qBAAqB,QAAQ,cAAc,CAAC,cAAc,kBAAkB,CAAC,EACnG,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EACvC,OAAO,OAAO;AACjB,QAAM,YAAY,CAAC,GAAG,kBAAkB,GAAG,YAAY,GAAG,QAAQ,WAAW,EAAE,OAAO,OAAO;AAC7F,QAAM,eAAe,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC;AAClD,QAAM,mCAAmC;AAAA,IACvC,GAAI,QAAQ,wBAAwB,CAAC;AAAA,EACvC;AACA,QAAM,gCAAgC;AAAA,IACpC,GAAI,QAAQ,6BAA6B,CAAC;AAAA,EAC5C;AACA,QAAM,2BAA2B,iCAAiC,SAC9D,mCACA;AACJ,QAAM,+BAA+B;AAAA,IACnC,GAAG;AAAA,IACH,GAAI,QAAQ,yBAAyB,CAAC;AAAA,EACxC;AACA,QAAM,iBAAiB,sBAAsB,0BAA0B,4BAA4B;AACnG,QAAM,qBAAqB,eAAe;AAC1C,wBAAsB,OAAO,qBAAqB,sBAAsB,iBAAiB,CAAC,KAAK,aAAa,CAAC,CAAC;AAE9G,QAAM,gBAAgB,aAAa,OAAO,CAAC,UAAU,SAAS,UAAU,kBAAkB;AAC1F,QAAM,gBAAgB,iBAAiB,QAAQ,0BAA0B,CAAC,CAAC;AAC3E,QAAM,kBAAkB,iBAAiB,cAAc,CAAC,KAAK,aAAa,CAAC;AAC3E,QAAM,mBAAmB,cAAc,OAAO,CAAC,UAAU,SAAS,UAAU,eAAe;AAC3F,wBAAsB,OAAO,kBAAkB,eAAe;AAC9D,wBAAsB,OAAO,oBAAoB,iBAAiB,CAAC,KAAK,mBAAmB,aAAa,CAAC,CAAC;AAC1G,wBAAsB,OAAO,iBAAiB,iBAAiB,CAAC,KAAK,iBAAiB,CAAC,KAAK,mBAAmB,aAAa,CAAC,CAAC;AAE9H,QAAM,WAAW,qBAAqB,QAAQ,cAAc,CAAC,aAAa,CAAC;AAC3E,QAAM,aAAa,gBAAgB,QAAQ;AAC3C,wBAAsB,OAAO,6BAA6B,UAAU;AACpE,wBAAsB,OAAO,iCAAiC,UAAU;AACxE,wBAAsB,OAAO,6BAA6B,aAAa,KAAK,QAAQ,UAAU,IAAI,mBAAmB,EAAE;AAEvH,QAAM,YAAY,qBAAqB,QAAQ,cAAc,CAAC,WAAW,CAAC;AAC1E,QAAM,mBAAmB,gBAAgB,SAAS;AAClD,wBAAsB,OAAO,uBAAuB,gBAAgB;AAEpE,QAAM,gBAAgB,qBAAqB,QAAQ,cAAc;AAAA,IAC/D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,gBAAgB,aAAa;AACnD,wBAAsB,OAAO,0BAA0B,aAAa;AACpE,wBAAsB,OAAO,8BAA8B,aAAa;AACxE,wBAAsB,OAAO,+BAA+B,aAAa;AAEzE,QAAM,eAAe,qBAAqB,QAAQ,cAAc,CAAC,eAAe,CAAC;AACjF,QAAM,eAAe,gBAAgB,YAAY,KAAK,iCAAiC,QAAQ,eAAe,CAAC,CAAC;AAChH,wBAAsB,OAAO,oBAAoB,YAAY;AAE7D,QAAM,oBAAoB,qBAAqB,QAAQ,cAAc;AAAA,IACnE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,cAAc,gBAAgB,iBAAiB;AACrD,wBAAsB,OAAO,qBAAqB,wBAAwB,WAAW,CAAC;AAEtF,QAAM,iBAAiB,qBAAqB,QAAQ,cAAc,CAAC,WAAW,CAAC;AAC/E,QAAM,WAAW,gBAAgB,cAAc;AAC/C,wBAAsB,OAAO,4BAA4B,QAAQ;AACjE,wBAAsB,OAAO,mBAAmB,QAAQ;AAExD,QAAM,kBAAkB,qBAAqB,QAAQ,cAAc,CAAC,cAAc,QAAQ,CAAC;AAC3F,QAAM,YAAY,gBAAgB,eAAe;AACjD,wBAAsB,OAAO,0BAA0B,SAAS;AAChE,wBAAsB,OAAO,yBAAyB,SAAS;AAE/D,QAAM,mBAAmB,qBAAqB,QAAQ,cAAc,CAAC,qBAAqB,CAAC;AAC3F,QAAM,eAAe,gBAAgB,iBAAiB,IAAI,CAAC,UAAU;AACnE,UAAM,OAAO,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY;AACpD,UAAM,SAAS,OAAO,WAAW,IAAI;AACrC,QAAI,CAAC,OAAO,SAAS,MAAM;AAAG,aAAO;AACrC,QAAI,KAAK,SAAS,IAAI;AAAG,aAAO;AAChC,QAAI,KAAK,SAAS,GAAG;AAAG,aAAO,SAAS;AACxC,WAAO;AAAA,EACT,CAAC,CAAC;AACF,wBAAsB,OAAO,4BAA4B,YAAY;AAErE,QAAM,eAAe,qBAAqB,QAAQ,cAAc,CAAC,YAAY,CAAC;AAC9E,QAAM,YAAY,aAAa,SAAS;AACxC,wBAAsB,OAAO,4BAA4B,YAAY,MAAM,IAAI;AAE/E,QAAM,iBAAiB,MAAM,KAAK,MAAM,aAAa;AACrD,QAAM,mBAAmB,eAAe,OAAO,CAAC,KAAK,SAAS;AAC5D,UAAM,WAAW,KAAK,MAAM,GAAG,EAAE,CAAC;AAClC,QAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,KAAK;AACvC,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,eAAe,SAC9B,KAAK,IAAI,MAAM,OAAO,eAAe,SAAS,IAAI,IAClD;AAEJ,SAAO,mBAAmB;AAAA,IACxB,QAAQ;AAAA,IACR,MAAM,OAAO,MAAM,cAAc,kBAAkB;AAAA,IACnD;AAAA,IACA,QAAQ,eAAe,SACnB,CAAC,IACD,CAAC,EAAE,UAAU,WAAW,SAAS,oDAAoD,CAAC;AAAA,IAC1F,aAAa,MAAM;AAAA,IACnB,MAAM;AAAA,MACJ,oBAAoB,eAAe;AAAA,MACnC;AAAA,MACA;AAAA,MACA,iBAAiB,aAAa;AAAA,MAC9B,qBAAqB;AAAA,QACnB,QAAQ,eAAe;AAAA,QACvB,YAAY;AAAA,UACV,MAAM,yBAAyB;AAAA,UAC/B,aAAa,iBAAiB;AAAA,UAC9B,aAAa,QAAQ,yBAAyB,CAAC,GAAG;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,kCAAkC,QAAQ,CAAC,GAAG;AAC5D,QAAM,MAAM,OAAO,MAAM,SAAS,EAAE,EAAE,KAAK;AAC3C,QAAM,aAAa,OAAO,MAAM,cAAc,SAAS;AAEvD,MAAI,CAAC,KAAK;AACR,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ,CAAC,EAAE,UAAU,SAAS,SAAS,qBAAqB,CAAC;AAAA,MAC7D,MAAM;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,aAAa,GAAG,GAAG;AACrB,UAAM,YAAY,yBAAyB,EAAE,MAAM,KAAK,QAAQ,MAAM,UAAU,CAAC,EAAE,CAAC;AACpF,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY,UAAU;AAAA,MACtB,QAAQ,UAAU;AAAA,MAClB,UAAU,UAAU;AAAA,MACpB,MAAM;AAAA,QACJ,GAAI,UAAU,QAAQ,CAAC;AAAA,QACvB,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,mBAAmB;AAAA,IACxB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,CAAC,EAAE,UAAU,QAAQ,SAAS,4DAA4D,CAAC;AAAA,IACnG,UAAU;AAAA,MACR,IAAI,GAAG,UAAU;AAAA,MACjB,MAAM;AAAA,MACN,MAAM,gFAAgF,WAAW,GAAG,CAAC;AAAA,IACvG;AAAA,IACA,MAAM;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,yBAAyB,QAAQ,CAAC,GAAG;AACnD,QAAM,OAAO,OAAO,MAAM,QAAQ,EAAE,EAAE,KAAK;AAC3C,MAAI,CAAC,MAAM;AACT,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ,CAAC,EAAE,UAAU,SAAS,SAAS,oBAAoB,CAAC;AAAA,IAC9D,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,qBAAqB,MAAM,EAAE,QAAQ,MAAM,UAAU,CAAC,EAAE,CAAC;AAE5E,SAAO,mBAAmB;AAAA,IACxB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,YAAY,WAAW;AAAA,IACvB,QAAQ,WAAW;AAAA,IACnB,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM,WAAW;AAAA,IACnB;AAAA,IACA,MAAM,WAAW;AAAA,EACnB,CAAC;AACH;AAEO,SAAS,8BAA8B,QAAQ,CAAC,GAAG;AACxD,QAAM,OAAO,OAAO,MAAM,QAAQ,EAAE,EAAE,KAAK;AAC3C,MAAI,CAAC,MAAM;AACT,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ,CAAC,EAAE,UAAU,SAAS,SAAS,oCAAoC,CAAC;AAAA,IAC9E,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,kBAAkB,IAAI;AACtC,QAAM,QAAQ;AAAA,IACZ,QAAQ,CAAC;AAAA,IACT,YAAY,CAAC;AAAA,EACf;AACA,QAAM,SAAS,CAAC;AAEhB,MAAI,SAAS;AACX,UAAM,OAAO,UAAU;AAAA,EACzB,OAAO;AACL,WAAO,KAAK;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,SAAS,KAAK,IAAI;AAAG,UAAM,WAAW,iBAAiB;AAC3D,MAAI,mBAAmB,KAAK,IAAI;AAAG,UAAM,WAAW,iBAAiB;AACrE,MAAI,kBAAkB,KAAK,IAAI;AAAG,UAAM,WAAW,iBAAiB;AAEpE,QAAM,aAAa,UAAU,OAAO;AAEpC,SAAO,mBAAmB;AAAA,IACxB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,UAAU;AAAA,QACR,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AChjGA,IAAM,2BAA2B;AACjC,IAAM,gCAAgC;AAEtC,SAAS,oBAAoB,OAAO;AAClC,QAAM,aAAa,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY;AAC1D,MAAI,eAAe;AAA+B,WAAO;AACzD,SAAO;AACT;AAEA,SAAS,iBAAiB,YAAY;AACpC,QAAM,QAAQ,WAAW,KAAK,EAAE,OAAO,OAAO;AAC9C,MAAI,CAAC,MAAM;AAAQ,WAAO,CAAC;AAC3B,QAAM,OAAO,oBAAI,IAAI;AACrB,SAAO,MAAM,OAAO,CAAC,UAAU;AAC7B,UAAM,MAAM,GAAG,OAAO,OAAO,YAAY,MAAM,CAAC,KAAK,OAAO,OAAO,QAAQ,EAAE,CAAC,KAAK,OAAO,OAAO,WAAW,EAAE,CAAC;AAC/G,QAAI,KAAK,IAAI,GAAG;AAAG,aAAO;AAC1B,SAAK,IAAI,GAAG;AACZ,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,kBAAkB,SAAS,CAAC,GAAG;AACtC,QAAM,OAAO,OAAO,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,OAAO,SAAS,KAAK,CAAC;AAC1F,MAAI,CAAC,KAAK;AAAQ,WAAO;AACzB,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;AAC3F;AAEA,SAAS,UAAU,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG;AACxC,SAAO;AAAA,IACL,GAAI,QAAQ,OAAO,SAAS,WAAW,OAAO,CAAC;AAAA,IAC/C,GAAI,SAAS,OAAO,UAAU,WAAW,QAAQ,CAAC;AAAA,EACpD;AACF;AAEA,SAASC,WAAU,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG;AAC3C,MAAI,CAAC,UAAU,OAAO,WAAW;AAAU,WAAO;AAClD,QAAM,MAAM,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,OAAO;AAC9D,SAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAI,GAAG,IAAIA;AAAA,QACT,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,MAAM,WAAW,IAAI,GAAG,IAAI,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAI,GAAG,IAAI;AAAA,IACb;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,WAAW,OAAO;AACzB,MAAI,OAAO,oBAAoB,YAAY;AACzC,QAAI;AACF,aAAO,gBAAgB,KAAK;AAAA,IAC9B,SAAS,OAAO;AAAA,IAAC;AAAA,EACnB;AACA,SAAO,KAAK,MAAM,KAAK,UAAU,SAAS,CAAC,CAAC,CAAC;AAC/C;AAEA,SAAS,yBAAyB,QAAQ,CAAC,GAAG;AAC5C,QAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,QAAM,MAAM,OAAO,OAAO,GAAG;AAC7B,QAAM,aAAa,OAAO,SAAS,KAAK,IAAI,MAAM,QAAQ,CAAC,IAAI;AAC/D,QAAM,WAAW,OAAO,SAAS,GAAG,IAAI,IAAI,QAAQ,CAAC,IAAI;AACzD,SAAO;AAAA,IACL,UAAU;AAAA,IACV,MAAM,OAAO,OAAO,QAAQ,SAAS;AAAA,IACrC,SAAS,GAAG,OAAO,OAAO,WAAW,mCAAmC,CAAC,WAAW,UAAU,cAAc,QAAQ;AAAA,EACtH;AACF;AAEA,SAAS,2BAA2B,aAAa,CAAC,GAAG,cAAc,CAAC,GAAG,UAAU,CAAC,GAAG;AACnF,QAAM,YAAY,eAAe,OAAO,gBAAgB,WAAW,OAAO,KAAK,WAAW,IAAI,CAAC;AAC/F,MAAI,CAAC,UAAU,QAAQ;AACrB,WAAO,EAAE,IAAI,MAAM,SAAS,OAAO,QAAQ,CAAC,GAAG,QAAQ,EAAE,IAAI,MAAM,QAAQ,CAAC,EAAE,EAAE;AAAA,EAClF;AAEA,QAAM,cAAc,OAAO,QAAQ,WAAW;AAC9C,QAAM,YAAY,OAAO,SAAS,WAAW,IAAI,cAAc;AAC/D,QAAM,eAAeA,WAAU,WAAW,cAAc,CAAC,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC,CAAC;AAC1F,QAAM,SAAS,eAAe,cAAc;AAAA,IAC1C,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,EAClB,CAAC;AACD,QAAM,SAAS,MAAM,QAAQ,QAAQ,MAAM,IACvC,OAAO,OAAO,IAAI,CAAC,UAAU,yBAAyB,KAAK,CAAC,IAC5D,CAAC;AAEL,SAAO;AAAA,IACL,IAAI,QAAQ,QAAQ,EAAE;AAAA,IACtB,SAAS,CAAC,QAAQ;AAAA,IAClB;AAAA,IACA,QAAQ;AAAA,MACN,IAAI,QAAQ,QAAQ,EAAE;AAAA,MACtB,aAAa;AAAA,MACb,QAAQ,MAAM,QAAQ,QAAQ,MAAM,IAAI,OAAO,SAAS,CAAC;AAAA,IAC3D;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB;AACrC,SAAO;AAAA,IACL,EAAE,IAAI,YAAY,MAAM,YAAY;AAAA,IACpC,EAAE,IAAI,iBAAiB,MAAM,gBAAgB;AAAA,IAC7C,EAAE,IAAI,oBAAoB,MAAM,mBAAmB;AAAA,IACnD,EAAE,IAAI,cAAc,MAAM,8BAA8B;AAAA,IACxD,EAAE,IAAI,YAAY,MAAM,qBAAqB;AAAA,IAC7C,EAAE,IAAI,iBAAiB,MAAM,0BAA0B;AAAA,EACzD;AACF;AAEA,eAAsB,cAAc,UAAU,CAAC,GAAG;AAChD,QAAM,aAAa,OAAO,QAAQ,cAAc,EAAE;AAClD,QAAM,aAAa,oBAAoB,QAAQ,UAAU;AACzD,QAAM,QAAQ,OAAO,QAAQ,SAAS,EAAE;AACxC,QAAM,SAAS,QAAQ,UAAU;AAEjC,MAAI,eAAe,YAAY;AAC7B,UAAM,SAAS,0BAA0B,QAAQ,YAAY,OAAO;AACpE,WAAO,OAAO,UAAU,OAAO,MAAM,EAAE,WAAW,CAAC;AACnD,WAAO;AAAA,EACT;AAEA,MAAI,eAAe,iBAAiB;AAClC,UAAM,mBAAmB,yBAAyB,EAAE,MAAM,OAAO,OAAO,CAAC;AACzE,QAAI,eAAe,0BAA0B;AAC3C,uBAAiB,OAAO,UAAU,iBAAiB,MAAM,EAAE,WAAW,CAAC;AACvE,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,uBAAuB,EAAE,MAAM,OAAO,QAAQ,WAAW,CAAC;AAC3E,UAAM,aAAa,2BAA2B,UAAU,CAAC,GAAG,SAAS,eAAe,CAAC,CAAC;AACtF,UAAM,kBAAkB,WAAW,UAAU,CAAC,IAAI,SAAS;AAC3D,UAAM,mBAAmB,WAAW,UAChC;AAAA,MACE;AAAA,QACE,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA,GAAG,WAAW;AAAA,IAChB,IACA,CAAC;AAEL,WAAO,mBAAmB;AAAA,MACxB,QAAQ,iBAAiB,UAAU;AAAA,MACnC,MAAM;AAAA,MACN,YAAY,kBAAkB,CAAC,iBAAiB,YAAY,SAAS,UAAU,CAAC;AAAA,MAChF,QAAQ,cAAc,iBAAiB,QAAQ,SAAS,QAAQ,gBAAgB;AAAA,MAChF,UAAU,iBAAiB;AAAA,MAC3B,aAAa;AAAA,MACb,MAAM,UAAU,iBAAiB,MAAM;AAAA,QACrC;AAAA,QACA,WAAW,SAAS;AAAA,QACpB,YAAY,WAAW;AAAA,QACvB,mBAAmB,WAAW;AAAA,MAChC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,MAAI,eAAe,oBAAoB;AACrC,UAAM,iBAAiB,kCAAkC,EAAE,OAAO,YAAY,OAAO,CAAC;AACtF,QAAI,eAAe,0BAA0B;AAC3C,qBAAe,OAAO,UAAU,eAAe,MAAM,EAAE,WAAW,CAAC;AACnE,aAAO;AAAA,IACT;AAEA,UAAM,iBAAiB,8BAA8B,EAAE,MAAM,MAAM,CAAC;AACpE,UAAM,WAAW,uBAAuB,EAAE,MAAM,OAAO,QAAQ,WAAW,CAAC;AAC3E,UAAM,cAAc;AAAA,MAClB,GAAI,eAAe,eAAe,OAAO,eAAe,gBAAgB,WACpE,eAAe,cACf,CAAC;AAAA,MACL,GAAI,SAAS,eAAe,OAAO,SAAS,gBAAgB,WAAW,SAAS,cAAc,CAAC;AAAA,IACjG;AACA,UAAM,aAAa,2BAA2B,UAAU,CAAC,GAAG,eAAe,CAAC,CAAC;AAC7E,UAAM,kBAAkB,WAAW,UAAU,CAAC,IAAI;AAClD,UAAM,mBAAmB,WAAW,UAChC;AAAA,MACE;AAAA,QACE,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA,GAAG,WAAW;AAAA,IAChB,IACA,CAAC;AAEL,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY,kBAAkB;AAAA,QAC5B,eAAe;AAAA,QACf,eAAe;AAAA,QACf,SAAS;AAAA,MACX,CAAC;AAAA,MACD,QAAQ;AAAA,QACN,eAAe;AAAA,QACf,eAAe;AAAA,QACf,SAAS;AAAA,QACT;AAAA,MACF;AAAA,MACA,UAAU,eAAe;AAAA,MACzB,aAAa;AAAA,MACb,MAAM,UAAU,eAAe,MAAM;AAAA,QACnC;AAAA,QACA,WAAW,SAAS;AAAA,QACpB,iBAAiB,eAAe;AAAA,QAChC,YAAY,WAAW;AAAA,QACvB,mBAAmB,WAAW;AAAA,MAChC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,MAAI,eAAe,gBAAgB,eAAe,cAAc,eAAe,iBAAiB;AAC9F,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN;AAAA,UACE,UAAU;AAAA,UACV,SAAS,GAAG,UAAU;AAAA,QACxB;AAAA,MACF;AAAA,MACA,MAAM,EAAE,WAAW;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,SAAO,mBAAmB;AAAA,IACxB,QAAQ,cAAc;AAAA,IACtB,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,CAAC,EAAE,UAAU,SAAS,SAAS,kCAAkC,CAAC;AAAA,IAC1E,MAAM,EAAE,WAAW;AAAA,EACrB,CAAC;AACH;;;AC3PA,IAAM,yBAAyB;AAC/B,IAAM,4BAA4B;AAClC,IAAM,uBAAuB;AAE7B,IAAI,YAAY;AAEhB,SAAS,oBAAoB;AAC3B,SAAO,OAAO,eAAe,eAAe,OAAO,WAAW,cAAc;AAC9E;AAEA,SAAS,aAAa,OAAO;AAC3B,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,cAAc,OAAO;AAC5B,SAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC;AACzC;AAEA,SAAS,eAAe,OAAO;AAC7B,SAAO,SAAS,OAAO,UAAU,WAAW,QAAQ,CAAC;AACvD;AAEA,SAAS,SAAS;AAChB,MAAI,CAAC,kBAAkB;AAAG,WAAO,QAAQ,QAAQ,IAAI;AACrD,MAAI;AAAW,WAAO;AAEtB,cAAY,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC3C,UAAM,UAAU,WAAW,UAAU,KAAK,wBAAwB,yBAAyB;AAE3F,YAAQ,kBAAkB,MAAM;AAC9B,YAAM,KAAK,QAAQ;AACnB,UAAI,CAAC,GAAG,iBAAiB,SAAS,oBAAoB,GAAG;AACvD,cAAM,QAAQ,GAAG,kBAAkB,sBAAsB;AAAA,UACvD,SAAS;AAAA,UACT,eAAe;AAAA,QACjB,CAAC;AACD,cAAM,YAAY,aAAa,aAAa,EAAE,QAAQ,MAAM,CAAC;AAC7D,cAAM,YAAY,cAAc,cAAc,EAAE,QAAQ,MAAM,CAAC;AAC/D,cAAM,YAAY,YAAY,YAAY,EAAE,QAAQ,MAAM,CAAC;AAAA,MAC7D;AAAA,IACF;AAEA,YAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,YAAQ,UAAU,MAAM,OAAO,QAAQ,SAAS,IAAI,MAAM,yCAAyC,CAAC;AAAA,EACtG,CAAC;AAED,SAAO;AACT;AAEA,SAAS,iBAAiB,SAAS;AACjC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,YAAQ,UAAU,MAAM,OAAO,QAAQ,SAAS,IAAI,MAAM,6BAA6B,CAAC;AAAA,EAC1F,CAAC;AACH;AAEA,SAAS,sBAAsB,QAAQ,CAAC,GAAG;AACzC,QAAM,MAAM,KAAK,IAAI;AACrB,QAAM,YAAY,OAAO,SAAS,OAAO,MAAM,SAAS,CAAC,IAAI,OAAO,MAAM,SAAS,IAAI;AACvF,QAAM,eAAe,IAAI,KAAK,SAAS,EAAE,YAAY;AAErD,QAAM,SAAS,cAAc,MAAM,MAAM,EAAE,IAAI,CAAC,WAAW;AAAA,IACzD,UAAU,aAAa,OAAO,YAAY,MAAM;AAAA,IAChD,SAAS,aAAa,OAAO,WAAW,EAAE;AAAA,EAC5C,EAAE;AAEF,QAAM,QAAQ,cAAc,MAAM,KAAK,EAAE,OAAO,CAAC,SAAS,OAAO,SAAS,QAAQ;AAClF,QAAM,wBAAwB,cAAc,MAAM,qBAAqB,EAAE;AAAA,IACvE,CAAC,UAAU,OAAO,UAAU;AAAA,EAC9B;AACA,QAAM,eAAe,cAAc,MAAM,YAAY,EAAE,OAAO,CAAC,SAAS,OAAO,SAAS,QAAQ;AAEhG,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,aAAa,MAAM,cAAc,SAAS;AAAA,IACtD,YAAY,aAAa,MAAM,cAAc,cAAc;AAAA,IAC3D,QAAQ,aAAa,MAAM,UAAU,SAAS;AAAA,IAC9C,MAAM,aAAa,MAAM,QAAQ,SAAS;AAAA,IAC1C,UAAU,aAAa,MAAM,YAAY,EAAE;AAAA,IAC3C,UAAU,OAAO,SAAS,OAAO,MAAM,QAAQ,CAAC,IAAI,OAAO,MAAM,QAAQ,IAAI;AAAA,IAC7E,UAAU,aAAa,MAAM,YAAY,EAAE;AAAA,IAC3C,cAAc,aAAa,MAAM,gBAAgB,EAAE;AAAA,IACnD,eAAe,aAAa,MAAM,iBAAiB,EAAE;AAAA,IACrD,YAAY,OAAO,SAAS,OAAO,MAAM,UAAU,CAAC,IAAI,OAAO,MAAM,UAAU,IAAI;AAAA,IACnF;AAAA,IACA;AAAA,IACA,UAAU,eAAe,MAAM,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA,0BAA0B,QAAQ,MAAM,wBAAwB;AAAA,IAChE,cAAc,aAAa,MAAM,gBAAgB,EAAE;AAAA,IACnD,aAAa,eAAe,MAAM,WAAW;AAAA,IAC7C,MAAM,eAAe,MAAM,IAAI;AAAA,IAC/B,gBAAgB,eAAe,MAAM,cAAc;AAAA,EACrD;AACF;AAEA,eAAsB,sBAAsB,QAAQ,CAAC,GAAG;AACtD,QAAM,KAAK,MAAM,OAAO;AACxB,MAAI,CAAC;AAAI,WAAO;AAEhB,QAAM,QAAQ,sBAAsB,KAAK;AACzC,QAAM,KAAK,GAAG,YAAY,sBAAsB,WAAW;AAC3D,QAAM,QAAQ,GAAG,YAAY,oBAAoB;AACjD,QAAM,KAAK,MAAM,iBAAiB,MAAM,IAAI,KAAK,CAAC;AAElD,SAAO,EAAE,IAAI,GAAG,MAAM;AACxB;AAEA,eAAsB,sBAAsB,UAAU,CAAC,GAAG;AACxD,QAAM,KAAK,MAAM,OAAO;AACxB,MAAI,CAAC;AAAI,WAAO,CAAC;AAEjB,QAAM,QAAQ,OAAO,SAAS,OAAO,QAAQ,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,OAAO,QAAQ,KAAK,CAAC,IAAI;AAC5F,QAAM,KAAK,GAAG,YAAY,sBAAsB,UAAU;AAC1D,QAAM,QAAQ,GAAG,YAAY,oBAAoB;AACjD,QAAM,QAAS,MAAM,iBAAiB,MAAM,OAAO,CAAC,KAAM,CAAC;AAE3D,SAAO,MACJ,KAAK,CAAC,GAAG,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,OAAO,GAAG,aAAa,CAAC,CAAC,EACpE,MAAM,GAAG,KAAK;AACnB;AAEA,eAAsB,0BAA0B,IAAI;AAClD,QAAM,KAAK,MAAM,OAAO;AACxB,MAAI,CAAC;AAAI,WAAO;AAEhB,QAAM,WAAW,OAAO,EAAE;AAC1B,MAAI,CAAC,OAAO,SAAS,QAAQ;AAAG,WAAO;AAEvC,QAAM,KAAK,GAAG,YAAY,sBAAsB,UAAU;AAC1D,QAAM,QAAQ,GAAG,YAAY,oBAAoB;AACjD,QAAM,QAAQ,MAAM,iBAAiB,MAAM,IAAI,QAAQ,CAAC;AACxD,SAAO,SAAS;AAClB;AAEA,eAAsB,yBAAyB;AAC7C,QAAM,KAAK,MAAM,OAAO;AACxB,MAAI,CAAC;AAAI;AAET,QAAM,KAAK,GAAG,YAAY,sBAAsB,WAAW;AAC3D,QAAM,QAAQ,GAAG,YAAY,oBAAoB;AACjD,QAAM,iBAAiB,MAAM,MAAM,CAAC;AACtC;",
|
|
6
|
-
"names": ["ancestor", "schemaNode", "path", "metadata", "pointer", "uiEntry", "normalized", "start", "scopedLocale", "translated", "translatedText", "PDS", "PDS", "PDS", "PDS", "ensureTrailingSlash", "PDS", "str", "presets", "defaultLog", "validateDesignConfig", "validateInitConfig", "resolvePublicAssetURL", "cloneWithoutFunctions", "PDS", "ontology", "findComponentForElement", "enums", "ensureTrailingSlash", "PDS", "__isStrTagged", "__collateStrings", "__replacePlaceholders", "__normalizeMessages", "key", "msg", "runtime", "startLive", "ensureTrailingSlash", "defaultPDSEnhancers", "nextAttrs", "PDS", "deepMerge"]
|
|
7
|
-
}
|