[{"data":1,"prerenderedAt":63},["Reactive",2],{"blog-post-markdown-html-integration-mixed-content-complete-guide":3},{"slug":4,"title":5,"description":6,"excerpt":7,"date":8,"category":9,"author":10,"keywords":11,"readingMinutes":12,"html":13,"headings":14,"tools":37,"related":38},"markdown-html-integration-mixed-content-complete-guide","Markdown HTML Integration and Mixed Content: Complete Guide to Seamless HTML-Markdown Workflows and Advanced Content Creation","Master HTML integration in Markdown documents. Learn to combine HTML and Markdown syntax, create custom components, handle complex layouts, and build sophisticated content systems that leverage both markup languages effectively.","Markdown HTML integration and mixed content systems enable sophisticated document creation through seamless combination of Markdown's simplicity with HTML's power and flexibility. By implementing…","2026-01-01","Tutorial","Matthew Rathbone","markdown html integration, mixed content markdown, html in markdown, custom html components, markdown html workflow, advanced markdown formatting, html markdown combination, custom content blocks",26,"\u003Cp>Markdown HTML integration and mixed content systems enable sophisticated document creation through seamless combination of Markdown&#39;s simplicity with HTML&#39;s power and flexibility. By implementing strategic HTML integration patterns, developing custom component systems, and creating robust mixed-content workflows, technical writers and developers can build comprehensive documentation platforms that leverage the best aspects of both markup languages while maintaining readability, accessibility, and maintainability across complex content architectures.\u003C/p>\n\u003Ch2 id=\"why-master-html-integration-in-markdown\">Why Master HTML Integration in Markdown?\u003C/h2>\n\u003Cp>Advanced HTML-Markdown integration provides essential capabilities for modern content creation:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Enhanced Layout Control\u003C/strong>: Create complex layouts and responsive designs beyond Markdown&#39;s limitations\u003C/li>\n\u003Cli>\u003Cstrong>Custom Component Systems\u003C/strong>: Build reusable HTML components integrated seamlessly with Markdown content\u003C/li>\n\u003Cli>\u003Cstrong>Interactive Content Creation\u003C/strong>: Embed dynamic elements, forms, and JavaScript-powered interactions\u003C/li>\n\u003Cli>\u003Cstrong>Accessibility Enhancement\u003C/strong>: Implement proper semantic HTML and ARIA attributes for inclusive design\u003C/li>\n\u003Cli>\u003Cstrong>Platform Consistency\u003C/strong>: Ensure consistent rendering across different Markdown processors and output formats\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"foundation-html-integration-principles\">Foundation HTML Integration Principles\u003C/h2>\n\u003Ch3 id=\"basic-html-in-markdown-patterns\">Basic HTML in Markdown Patterns\u003C/h3>\n\u003Cp>Understanding how HTML and Markdown interact in various processors:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Basic HTML Integration Examples\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Inline HTML Elements\u003C/span>\n\nStandard Markdown text with \u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">strong\u003C/span>&gt;\u003C/span>\u003C/span>inline HTML emphasis\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">strong\u003C/span>&gt;\u003C/span>\u003C/span> and \n\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">em\u003C/span>&gt;\u003C/span>\u003C/span>styled elements\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">em\u003C/span>&gt;\u003C/span>\u003C/span> integrated naturally within paragraphs.\n\nYou can use \u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">code\u003C/span>&gt;\u003C/span>\u003C/span>inline code elements\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">code\u003C/span>&gt;\u003C/span>\u003C/span> alongside \u003Cspan class=\"hljs-code\">`markdown code`\u003C/span> \nfor different styling effects and semantic meaning.\n\nCustom styling with \u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">span\u003C/span> \u003Cspan class=\"hljs-attr\">class\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;highlight&quot;\u003C/span>&gt;\u003C/span>\u003C/span>CSS classes\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">span\u003C/span>&gt;\u003C/span>\u003C/span> and \n\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">mark\u003C/span>&gt;\u003C/span>\u003C/span>semantic HTML elements\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">mark\u003C/span>&gt;\u003C/span>\u003C/span> for enhanced content presentation.\n\n\u003Cspan class=\"hljs-section\">## Block-Level HTML Integration\u003C/span>\n\n\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">div\u003C/span> \u003Cspan class=\"hljs-attr\">class\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;info-box&quot;\u003C/span>&gt;\u003C/span>\u003C/span>\n\u003Cspan class=\"hljs-code\">    &lt;h3&gt;Information Block&lt;/h3&gt;\n    &lt;p&gt;This is a complete HTML block integrated within Markdown content. \n    Standard Markdown formatting like **bold text** and *italic text* \n    still works within HTML blocks in many processors.&lt;/p&gt;\n    \n    &lt;ul&gt;\n        &lt;li&gt;HTML lists within blocks&lt;/li&gt;\n        &lt;li&gt;Mixed content capabilities&lt;/li&gt;\n        &lt;li&gt;Semantic structure preservation&lt;/li&gt;\n    &lt;/ul&gt;\n&lt;/div&gt;\n\u003C/span>\nRegular Markdown content continues seamlessly after HTML blocks, \nmaintaining document flow and readability.\n\n\u003Cspan class=\"hljs-section\">## Complex Layout Integration\u003C/span>\n\n\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">section\u003C/span> \u003Cspan class=\"hljs-attr\">class\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;two-column-layout&quot;\u003C/span>&gt;\u003C/span>\u003C/span>\n\u003Cspan class=\"hljs-code\">    &lt;div class=&quot;column&quot;&gt;\n        &lt;h4&gt;Left Column Content&lt;/h4&gt;\n        \n        Standard **Markdown formatting** continues to work within \n        HTML containers, providing flexible content creation options.\n        \n        - Markdown lists\n        - Within HTML containers\n        - Seamless integration\n    &lt;/div&gt;\n    \n    &lt;div class=&quot;column&quot;&gt;\n        &lt;h4&gt;Right Column Content&lt;/h4&gt;\n        \n        ```javascript\n        // Code blocks also work within HTML containers\n        function integration() {\n            return &quot;HTML + Markdown&quot;;\n        }\n        ```\n        \n        &gt; Blockquotes and other Markdown elements\n        &gt; maintain their formatting within HTML structures.\n    &lt;/div&gt;\n&lt;/section&gt;\n\u003C/span>\n\u003Cspan class=\"hljs-section\">## Custom Component Integration\u003C/span>\n\n\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">article\u003C/span> \u003Cspan class=\"hljs-attr\">class\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;tutorial-step&quot;\u003C/span> \u003Cspan class=\"hljs-attr\">data-step\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;1&quot;\u003C/span>&gt;\u003C/span>\u003C/span>\n\u003Cspan class=\"hljs-code\">    &lt;header class=&quot;step-header&quot;&gt;\n        &lt;h3&gt;Step 1: Setup Process&lt;/h3&gt;\n        &lt;span class=&quot;step-badge&quot;&gt;Essential&lt;/span&gt;\n    &lt;/header&gt;\n    \n    &lt;div class=&quot;step-content&quot;&gt;\n        Begin by configuring your **Markdown processor** to handle mixed content:\n        \n        1. Enable HTML support in processor settings\n        2. Configure HTML whitelist for security\n        3. Test **mixed content rendering** thoroughly\n        \n        &lt;div class=&quot;code-example&quot;&gt;\n            ```bash\n            # Example configuration command\n            markdown-processor --enable-html --secure-mode\n            ```\n        &lt;/div&gt;\n        \n        &lt;div class=&quot;step-notes&quot;&gt;\n            **Important**: Always validate HTML security when accepting \n            user-generated content with mixed HTML-Markdown integration.\n        &lt;/div&gt;\n    &lt;/div&gt;\n&lt;/article&gt;\n\u003C/span>\n\u003Cspan class=\"hljs-section\">## Table Enhancement with HTML\u003C/span>\n\n\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">table\u003C/span> \u003Cspan class=\"hljs-attr\">class\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;enhanced-table&quot;\u003C/span> \u003Cspan class=\"hljs-attr\">role\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;grid&quot;\u003C/span>&gt;\u003C/span>\u003C/span>\n\u003Cspan class=\"hljs-code\">    &lt;thead&gt;\n        &lt;tr&gt;\n            &lt;th scope=&quot;col&quot;&gt;Feature&lt;/th&gt;\n            &lt;th scope=&quot;col&quot;&gt;Markdown Only&lt;/th&gt;\n            &lt;th scope=&quot;col&quot;&gt;HTML Enhanced&lt;/th&gt;\n            &lt;th scope=&quot;col&quot;&gt;Benefits&lt;/th&gt;\n        &lt;/tr&gt;\n    &lt;/thead&gt;\n    &lt;tbody&gt;\n        &lt;tr&gt;\n            &lt;td&gt;&lt;strong&gt;Basic Tables&lt;/strong&gt;&lt;/td&gt;\n            &lt;td&gt;✅ Simple syntax&lt;/td&gt;\n            &lt;td&gt;✅ Enhanced styling&lt;/td&gt;\n            &lt;td&gt;\n                &lt;ul class=&quot;benefit-list&quot;&gt;\n                    &lt;li&gt;Responsive design&lt;/li&gt;\n                    &lt;li&gt;Custom styling&lt;/li&gt;\n                &lt;/ul&gt;\n            &lt;/td&gt;\n        &lt;/tr&gt;\n        &lt;tr&gt;\n            &lt;td&gt;&lt;strong&gt;Complex Layouts&lt;/strong&gt;&lt;/td&gt;\n            &lt;td&gt;❌ Limited&lt;/td&gt;\n            &lt;td&gt;✅ Full control&lt;/td&gt;\n            &lt;td&gt;\n                Advanced table features:\n                - Cell spanning\n                - **Custom headers**\n                - Interactive elements\n            &lt;/td&gt;\n        &lt;/tr&gt;\n    &lt;/tbody&gt;\n&lt;/table&gt;\n\u003C/span>\n\u003Cspan class=\"hljs-section\">## Form Integration\u003C/span>\n\n\u003Cspan class=\"language-xml\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">form\u003C/span> \u003Cspan class=\"hljs-attr\">class\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;markdown-form&quot;\u003C/span> \u003Cspan class=\"hljs-attr\">action\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;#&quot;\u003C/span> \u003Cspan class=\"hljs-attr\">method\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;post&quot;\u003C/span>&gt;\u003C/span>\u003C/span>\n\u003Cspan class=\"hljs-code\">    &lt;fieldset&gt;\n        &lt;legend&gt;Contact Information Form&lt;/legend&gt;\n        \n        &lt;div class=&quot;form-group&quot;&gt;\n            &lt;label for=&quot;name&quot;&gt;Name:&lt;/label&gt;\n            &lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot; required&gt;\n            &lt;small&gt;*Enter your full name as it should appear in documentation.*&lt;/small&gt;\n        &lt;/div&gt;\n        \n        &lt;div class=&quot;form-group&quot;&gt;\n            &lt;label for=&quot;email&quot;&gt;Email:&lt;/label&gt;\n            &lt;input type=&quot;email&quot; id=&quot;email&quot; name=&quot;email&quot; required&gt;\n        &lt;/div&gt;\n        \n        &lt;div class=&quot;form-group&quot;&gt;\n            &lt;label for=&quot;content-type&quot;&gt;Content Type:&lt;/label&gt;\n            &lt;select id=&quot;content-type&quot; name=&quot;content-type&quot;&gt;\n                &lt;option value=&quot;tutorial&quot;&gt;Tutorial Content&lt;/option&gt;\n                &lt;option value=&quot;reference&quot;&gt;Reference Documentation&lt;/option&gt;\n                &lt;option value=&quot;example&quot;&gt;Code Examples&lt;/option&gt;\n            &lt;/select&gt;\n        &lt;/div&gt;\n        \n        &lt;div class=&quot;form-group&quot;&gt;\n            &lt;label for=&quot;description&quot;&gt;Description:&lt;/label&gt;\n            &lt;textarea id=&quot;description&quot; name=&quot;description&quot; rows=&quot;4&quot;&gt;\nWrite your content description using **Markdown formatting** \nif supported by your form processor.\n            &lt;/textarea&gt;\n        &lt;/div&gt;\n        \n        &lt;button type=&quot;submit&quot; class=&quot;submit-button&quot;&gt;Submit Content&lt;/button&gt;\n    &lt;/fieldset&gt;\n&lt;/form&gt;\n\u003C/span>\nIntegration continues with normal Markdown content flow...\n\u003C/code>\u003C/pre>\u003Ch3 id=\"html-security-and-sanitization\">HTML Security and Sanitization\u003C/h3>\n\u003Cp>Critical considerations for safe HTML integration:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// markdown-html-sanitizer.js - Comprehensive HTML sanitization for Markdown\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownHTMLSanitizer\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">allowedTags\u003C/span>: [\n                \u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;span&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;p&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h1&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h2&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h3&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h4&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h5&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h6&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-string\">&#x27;strong&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;em&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;code&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;pre&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;blockquote&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-string\">&#x27;ul&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;ol&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;li&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;thead&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;tbody&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;tr&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;td&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;th&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-string\">&#x27;a&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;img&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;br&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;hr&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;section&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;article&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;footer&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-string\">&#x27;nav&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;aside&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;main&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;figure&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;figcaption&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;details&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;summary&#x27;\u003C/span>\n            ],\n            \u003Cspan class=\"hljs-attr\">allowedAttributes\u003C/span>: {\n                \u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;class&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;id&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;role&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;data-*&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;span&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;class&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;id&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;a&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;href&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;target&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;rel&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;img&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;src&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;alt&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;width&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;height&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;loading&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;class&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;role&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;th&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;scope&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;colspan&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;rowspan&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;td&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;colspan&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;rowspan&#x27;\u003C/span>],\n                \u003Cspan class=\"hljs-string\">&#x27;*&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;class&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;id&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;aria-*&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;data-*&#x27;\u003C/span>]\n            },\n            \u003Cspan class=\"hljs-attr\">allowedProtocols\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;http&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;https&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;mailto&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;tel&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">blockScripts\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">blockStyles\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">preserveMarkdown\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">validateNesting\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            ...options\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dangerousTags\u003C/span> = [\u003Cspan class=\"hljs-string\">&#x27;script&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;iframe&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;embed&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;form&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;input&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;button&#x27;\u003C/span>];\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">selfClosingTags\u003C/span> = [\u003Cspan class=\"hljs-string\">&#x27;br&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;hr&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;img&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;input&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;area&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;base&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;col&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;embed&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;link&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;meta&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;param&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;source&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;track&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;wbr&#x27;\u003C/span>];\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeDocument\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Step 1: Extract and protect Markdown code blocks\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> codeBlocks = [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> protectedContent = content.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/```[\\s\\S]*?```|`[^`]+`/g\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, offset\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholder = \u003Cspan class=\"hljs-string\">`__CODEBLOCK_\u003Cspan class=\"hljs-subst\">${codeBlocks.length}\u003C/span>__`\u003C/span>;\n            codeBlocks.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(match);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> placeholder;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Step 2: Extract and validate HTML blocks\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> htmlBlocks = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">extractHTMLBlocks\u003C/span>(protectedContent);\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> sanitizedContent = protectedContent;\n        \n        \u003Cspan class=\"hljs-comment\">// Step 3: Sanitize each HTML block\u003C/span>\n        htmlBlocks.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">block, index\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> sanitized = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeHTMLBlock\u003C/span>(block.\u003Cspan class=\"hljs-property\">content\u003C/span>);\n            sanitizedContent = sanitizedContent.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(block.\u003Cspan class=\"hljs-property\">placeholder\u003C/span>, sanitized);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Step 4: Restore code blocks\u003C/span>\n        codeBlocks.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">code, index\u003C/span>) =&gt;\u003C/span> {\n            sanitizedContent = sanitizedContent.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">`__CODEBLOCK_\u003Cspan class=\"hljs-subst\">${index}\u003C/span>__`\u003C/span>, code);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Step 5: Final validation and cleanup\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">finalValidation\u003C/span>(sanitizedContent);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">extractHTMLBlocks\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> htmlBlocks = [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> htmlRegex = \u003Cspan class=\"hljs-regexp\">/&lt;(\\w+)(?:\\s[^&gt;]*)?&gt;([\\s\\S]*?)&lt;\\/\\1&gt;/gi\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = htmlRegex.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(content)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> tag = match[\u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> fullMatch = match[\u003Cspan class=\"hljs-number\">0\u003C/span>];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> innerContent = match[\u003Cspan class=\"hljs-number\">2\u003C/span>];\n            \n            \u003Cspan class=\"hljs-comment\">// Validate tag is allowed\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">allowedTags\u003C/span>.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(tag)) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholder = \u003Cspan class=\"hljs-string\">`__HTMLBLOCK_\u003Cspan class=\"hljs-subst\">${htmlBlocks.length}\u003C/span>__`\u003C/span>;\n                htmlBlocks.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                    \u003Cspan class=\"hljs-attr\">placeholder\u003C/span>: placeholder,\n                    \u003Cspan class=\"hljs-attr\">content\u003C/span>: fullMatch,\n                    \u003Cspan class=\"hljs-attr\">tag\u003C/span>: tag,\n                    \u003Cspan class=\"hljs-attr\">innerContent\u003C/span>: innerContent\n                });\n                \n                content = content.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(fullMatch, placeholder);\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> htmlBlocks;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeHTMLBlock\u003C/span>(\u003Cspan class=\"hljs-params\">htmlContent\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Parse HTML and validate structure\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> doc = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">DOMParser\u003C/span>().\u003Cspan class=\"hljs-title function_\">parseFromString\u003C/span>(\u003Cspan class=\"hljs-string\">`&lt;div&gt;\u003Cspan class=\"hljs-subst\">${htmlContent}\u003C/span>&lt;/div&gt;`\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;text/html&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> container = doc.\u003Cspan class=\"hljs-title function_\">querySelector\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!container) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.escapeHTML(htmlContent);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Recursively sanitize all elements\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeElement\u003C/span>(container);\n        \n        \u003Cspan class=\"hljs-comment\">// Return inner HTML (excluding the wrapper div)\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> container.\u003Cspan class=\"hljs-property\">innerHTML\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeElement\u003C/span>(\u003Cspan class=\"hljs-params\">element\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> tagName = element.\u003Cspan class=\"hljs-property\">tagName\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Remove dangerous tags entirely\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dangerousTags\u003C/span>.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(tagName)) {\n            element.\u003Cspan class=\"hljs-title function_\">remove\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Remove disallowed tags but keep content\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">allowedTags\u003C/span>.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(tagName)) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> parent = element.\u003Cspan class=\"hljs-property\">parentNode\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">while\u003C/span> (element.\u003Cspan class=\"hljs-property\">firstChild\u003C/span>) {\n                parent.\u003Cspan class=\"hljs-title function_\">insertBefore\u003C/span>(element.\u003Cspan class=\"hljs-property\">firstChild\u003C/span>, element);\n            }\n            element.\u003Cspan class=\"hljs-title function_\">remove\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Sanitize attributes\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeAttributes\u003C/span>(element);\n        \n        \u003Cspan class=\"hljs-comment\">// Recursively sanitize child elements\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> children = \u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">from\u003C/span>(element.\u003Cspan class=\"hljs-property\">children\u003C/span>);\n        children.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">child\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeElement\u003C/span>(child));\n        \n        \u003Cspan class=\"hljs-comment\">// Validate nesting if enabled\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">validateNesting\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">validateNesting\u003C/span>(element);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeAttributes\u003C/span>(\u003Cspan class=\"hljs-params\">element\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> tagName = element.\u003Cspan class=\"hljs-property\">tagName\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> allowedAttrs = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">allowedAttributes\u003C/span>[tagName] || \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">allowedAttributes\u003C/span>[\u003Cspan class=\"hljs-string\">&#x27;*&#x27;\u003C/span>] || [];\n        \n        \u003Cspan class=\"hljs-comment\">// Get all attributes\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> attributes = \u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">from\u003C/span>(element.\u003Cspan class=\"hljs-property\">attributes\u003C/span>);\n        \n        attributes.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">attr\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> attrName = attr.\u003Cspan class=\"hljs-property\">name\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> attrValue = attr.\u003Cspan class=\"hljs-property\">value\u003C/span>;\n            \n            \u003Cspan class=\"hljs-keyword\">let\u003C/span> isAllowed = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n            \n            \u003Cspan class=\"hljs-comment\">// Check if attribute is explicitly allowed\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> allowed \u003Cspan class=\"hljs-keyword\">of\u003C/span> allowedAttrs) {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (allowed === attrName) {\n                    isAllowed = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n                    \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (allowed.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;*&#x27;\u003C/span>)) {\n                    \u003Cspan class=\"hljs-comment\">// Handle wildcard attributes like &#x27;data-*&#x27; or &#x27;aria-*&#x27;\u003C/span>\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> pattern = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">RegExp\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;^&#x27;\u003C/span> + allowed.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;*&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;.*&#x27;\u003C/span>) + \u003Cspan class=\"hljs-string\">&#x27;$&#x27;\u003C/span>);\n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (pattern.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(attrName)) {\n                        isAllowed = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n                        \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n                    }\n                }\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!isAllowed) {\n                element.\u003Cspan class=\"hljs-title function_\">removeAttribute\u003C/span>(attrName);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Sanitize attribute values\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> sanitizedValue = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeAttributeValue\u003C/span>(attrName, attrValue);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (sanitizedValue !== attrValue) {\n                element.\u003Cspan class=\"hljs-title function_\">setAttribute\u003C/span>(attrName, sanitizedValue);\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeAttributeValue\u003C/span>(\u003Cspan class=\"hljs-params\">attrName, value\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Handle URL attributes\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> ([\u003Cspan class=\"hljs-string\">&#x27;href&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;src&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;action&#x27;\u003C/span>].\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(attrName)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeURL\u003C/span>(value);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle class attributes\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (attrName === \u003Cspan class=\"hljs-string\">&#x27;class&#x27;\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeClassName\u003C/span>(value);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle ID attributes\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (attrName === \u003Cspan class=\"hljs-string\">&#x27;id&#x27;\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeID\u003C/span>(value);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle data attributes\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (attrName.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;data-&#x27;\u003C/span>)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeDataAttribute\u003C/span>(value);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle ARIA attributes\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (attrName.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;aria-&#x27;\u003C/span>)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeAriaAttribute\u003C/span>(value);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Default: escape potentially dangerous characters\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> value.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[&lt;&gt;&quot;&#x27;]/g\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">char\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> entities = { \u003Cspan class=\"hljs-string\">&#x27;&lt;&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&amp;lt;&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&gt;&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&amp;gt;&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&quot;&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&amp;quot;&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&quot;&#x27;&quot;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&amp;#39;&#x27;\u003C/span> };\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> entities[char] || char;\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeURL\u003C/span>(\u003Cspan class=\"hljs-params\">url\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> parsedURL = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title function_\">URL\u003C/span>(url, \u003Cspan class=\"hljs-variable language_\">window\u003C/span>.\u003Cspan class=\"hljs-property\">location\u003C/span>.\u003Cspan class=\"hljs-property\">href\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">allowedProtocols\u003C/span>.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(parsedURL.\u003Cspan class=\"hljs-property\">protocol\u003C/span>.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, -\u003Cspan class=\"hljs-number\">1\u003C/span>))) {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> parsedURL.\u003Cspan class=\"hljs-property\">href\u003C/span>;\n            } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;#&#x27;\u003C/span>; \u003Cspan class=\"hljs-comment\">// Return safe fallback\u003C/span>\n            }\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (e) {\n            \u003Cspan class=\"hljs-comment\">// If URL parsing fails, check for relative URLs or anchors\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (url.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;#&#x27;\u003C/span>) || url.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;/&#x27;\u003C/span>) || !url.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;:&#x27;\u003C/span>)) {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> url; \u003Cspan class=\"hljs-comment\">// Allow relative URLs and anchors\u003C/span>\n            }\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;#&#x27;\u003C/span>; \u003Cspan class=\"hljs-comment\">// Return safe fallback\u003C/span>\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeClassName\u003C/span>(\u003Cspan class=\"hljs-params\">className\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Allow alphanumeric, hyphens, underscores, and spaces\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> className.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[^a-zA-Z0-9\\-_\\s]/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">trim\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeID\u003C/span>(\u003Cspan class=\"hljs-params\">id\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Allow alphanumeric, hyphens, and underscores only\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> id.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[^a-zA-Z0-9\\-_]/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeDataAttribute\u003C/span>(\u003Cspan class=\"hljs-params\">value\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Basic data attribute sanitization\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> value.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[&lt;&gt;&quot;&#x27;]/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">trim\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">sanitizeAriaAttribute\u003C/span>(\u003Cspan class=\"hljs-params\">value\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// ARIA attributes can contain specific values\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> value.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[&lt;&gt;&quot;]/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">trim\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">validateNesting\u003C/span>(\u003Cspan class=\"hljs-params\">element\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> tagName = element.\u003Cspan class=\"hljs-property\">tagName\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> parent = element.\u003Cspan class=\"hljs-property\">parentElement\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!parent) \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> parentTag = parent.\u003Cspan class=\"hljs-property\">tagName\u003C/span>.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Define invalid nesting combinations\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> invalidNesting = {\n            \u003Cspan class=\"hljs-string\">&#x27;p&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;section&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;article&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h1&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h2&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h3&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h4&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h5&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h6&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-string\">&#x27;h1&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;h1&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h2&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h3&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h4&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h5&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h6&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-string\">&#x27;h2&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;h1&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h2&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h3&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h4&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h5&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h6&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-string\">&#x27;a&#x27;\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;a&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;button&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;input&#x27;\u003C/span>]\n        };\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (invalidNesting[parentTag] &amp;&amp; invalidNesting[parentTag].\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(tagName)) {\n            \u003Cspan class=\"hljs-comment\">// Move element outside of invalid parent\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> grandparent = parent.\u003Cspan class=\"hljs-property\">parentNode\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (grandparent) {\n                grandparent.\u003Cspan class=\"hljs-title function_\">insertBefore\u003C/span>(element, parent.\u003Cspan class=\"hljs-property\">nextSibling\u003C/span>);\n            }\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">finalValidation\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Final cleanup and validation\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content\n            .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/__HTMLBLOCK_\\d+__/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) \u003Cspan class=\"hljs-comment\">// Remove any unreplaced placeholders\u003C/span>\n            .\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\n\\s*\\n\\s*\\n/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;\\n\\n&#x27;\u003C/span>) \u003Cspan class=\"hljs-comment\">// Normalize excessive whitespace\u003C/span>\n            .\u003Cspan class=\"hljs-title function_\">trim\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">escapeHTML\u003C/span>(\u003Cspan class=\"hljs-params\">html\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> div = \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">createElement\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>);\n        div.\u003Cspan class=\"hljs-property\">textContent\u003C/span> = html;\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> div.\u003Cspan class=\"hljs-property\">innerHTML\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Public API methods\u003C/span>\n    \u003Cspan class=\"hljs-title function_\">sanitize\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">sanitizeDocument\u003C/span>(content);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">validateHTMLSafety\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> dangerousPatterns = [\n            \u003Cspan class=\"hljs-regexp\">/&lt;script[\\s\\S]*?&lt;\\/script&gt;/gi\u003C/span>,\n            \u003Cspan class=\"hljs-regexp\">/javascript:/gi\u003C/span>,\n            \u003Cspan class=\"hljs-regexp\">/vbscript:/gi\u003C/span>,\n            \u003Cspan class=\"hljs-regexp\">/on\\w+\\s*=/gi\u003C/span>,\n            \u003Cspan class=\"hljs-regexp\">/&lt;iframe[\\s\\S]*?&lt;\\/iframe&gt;/gi\u003C/span>,\n            \u003Cspan class=\"hljs-regexp\">/&lt;object[\\s\\S]*?&lt;\\/object&gt;/gi\u003C/span>,\n            \u003Cspan class=\"hljs-regexp\">/&lt;embed[\\s\\S]*?&gt;/gi\u003C/span>\n        ];\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> issues = [];\n        \n        dangerousPatterns.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">pattern, index\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> matches = content.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(pattern);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (matches) {\n                issues.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                    \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;security&#x27;\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">pattern\u003C/span>: pattern.\u003Cspan class=\"hljs-title function_\">toString\u003C/span>(),\n                    \u003Cspan class=\"hljs-attr\">matches\u003C/span>: matches,\n                    \u003Cspan class=\"hljs-attr\">severity\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;high&#x27;\u003C/span>\n                });\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">isSafe\u003C/span>: issues.\u003Cspan class=\"hljs-property\">length\u003C/span> === \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">issues\u003C/span>: issues,\n            \u003Cspan class=\"hljs-attr\">recommendation\u003C/span>: issues.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> ? \u003Cspan class=\"hljs-string\">&#x27;Content contains potentially dangerous HTML and should be sanitized before use.&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;Content appears safe for use.&#x27;\u003C/span>\n        };\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Usage examples\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> sanitizer = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownHTMLSanitizer\u003C/span>({\n    \u003Cspan class=\"hljs-attr\">allowedTags\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;p&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h1&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h2&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;h3&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;strong&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;em&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;code&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;a&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;img&#x27;\u003C/span>],\n    \u003Cspan class=\"hljs-attr\">blockScripts\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n    \u003Cspan class=\"hljs-attr\">validateNesting\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>\n});\n\n\u003Cspan class=\"hljs-comment\">// Sanitize mixed HTML-Markdown content\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> mixedContent = \u003Cspan class=\"hljs-string\">`\n# My Document\n\n&lt;div class=&quot;content-block&quot;&gt;\n    This is **mixed content** with &lt;strong&gt;HTML tags&lt;/strong&gt;.\n    \n    &lt;script&gt;alert(&#x27;dangerous&#x27;);&lt;/script&gt;\n    \n    ## Subheading\n    \n    &lt;p&gt;Regular paragraph with &lt;a href=&quot;https://example.com&quot;&gt;safe link&lt;/a&gt;.&lt;/p&gt;\n&lt;/div&gt;\n\nNormal Markdown continues here...\n`\u003C/span>;\n\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> sanitizedContent = sanitizer.\u003Cspan class=\"hljs-title function_\">sanitize\u003C/span>(mixedContent);\n\u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(sanitizedContent);\n\n\u003Cspan class=\"hljs-comment\">// Validate content safety\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> safetyReport = sanitizer.\u003Cspan class=\"hljs-title function_\">validateHTMLSafety\u003C/span>(mixedContent);\n\u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(safetyReport);\n\u003C/code>\u003C/pre>\u003Ch2 id=\"advanced-component-systems\">Advanced Component Systems\u003C/h2>\n\u003Ch3 id=\"custom-html-component-framework\">Custom HTML Component Framework\u003C/h3>\n\u003Cp>Building reusable components that integrate seamlessly with Markdown:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// markdown-component-system.js - Advanced HTML component framework for Markdown\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownComponentSystem\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">componentPrefix\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;md-&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">enableNesting\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">allowMarkdownInComponents\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">validateComponents\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">debugMode\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">customComponents\u003C/span>: {},\n            ...options\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">processors\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">depth\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">maxDepth\u003C/span>: \u003Cspan class=\"hljs-number\">10\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">variables\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>()\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">initializeDefaultComponents\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">initializeDefaultComponents\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Register built-in components\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;callout&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createCalloutComponent\u003C/span>());\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;tabs&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createTabsComponent\u003C/span>());\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;code-example&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createCodeExampleComponent\u003C/span>());\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;image-gallery&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createImageGalleryComponent\u003C/span>());\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;table-wrapper&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createTableWrapperComponent\u003C/span>());\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;info-card&#x27;\u003C/span>, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createInfoCardComponent\u003C/span>());\n        \n        \u003Cspan class=\"hljs-comment\">// Register custom components if provided\u003C/span>\n        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">customComponents\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, component]\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(name, component);\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-params\">name, component\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-keyword\">typeof\u003C/span> component !== \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span> || !component.\u003Cspan class=\"hljs-property\">render\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Component \u003Cspan class=\"hljs-subst\">${name}\u003C/span> must have a render method`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, {\n            \u003Cspan class=\"hljs-attr\">name\u003C/span>: name,\n            \u003Cspan class=\"hljs-attr\">render\u003C/span>: component.\u003Cspan class=\"hljs-property\">render\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">validate\u003C/span>: component.\u003Cspan class=\"hljs-property\">validate\u003C/span> || (\u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>),\n            \u003Cspan class=\"hljs-attr\">attributes\u003C/span>: component.\u003Cspan class=\"hljs-property\">attributes\u003C/span> || [],\n            \u003Cspan class=\"hljs-attr\">allowChildren\u003C/span>: component.\u003Cspan class=\"hljs-property\">allowChildren\u003C/span> !== \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">selfClosing\u003C/span>: component.\u003Cspan class=\"hljs-property\">selfClosing\u003C/span> || \u003Cspan class=\"hljs-literal\">false\u003C/span>\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">processDocument\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">depth\u003C/span> = \u003Cspan class=\"hljs-number\">0\u003C/span>;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">variables\u003C/span>.\u003Cspan class=\"hljs-title function_\">clear\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Step 1: Extract and protect Markdown code blocks\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> { \u003Cspan class=\"hljs-attr\">content\u003C/span>: protectedContent, codeBlocks } = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">protectCodeBlocks\u003C/span>(content);\n        \n        \u003Cspan class=\"hljs-comment\">// Step 2: Process component syntax\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> processedContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processComponents\u003C/span>(protectedContent);\n        \n        \u003Cspan class=\"hljs-comment\">// Step 3: Restore code blocks\u003C/span>\n        processedContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">restoreCodeBlocks\u003C/span>(processedContent, codeBlocks);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> processedContent;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">protectCodeBlocks\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> codeBlocks = [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> protectedContent = content.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/```[\\s\\S]*?```|`[^`]+`/g\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> placeholder = \u003Cspan class=\"hljs-string\">`__PROTECTED_CODE_\u003Cspan class=\"hljs-subst\">${codeBlocks.length}\u003C/span>__`\u003C/span>;\n            codeBlocks.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(match);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> placeholder;\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">content\u003C/span>: protectedContent, codeBlocks };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">restoreCodeBlocks\u003C/span>(\u003Cspan class=\"hljs-params\">content, codeBlocks\u003C/span>) {\n        codeBlocks.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">code, index\u003C/span>) =&gt;\u003C/span> {\n            content = content.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-string\">`__PROTECTED_CODE_\u003Cspan class=\"hljs-subst\">${index}\u003C/span>__`\u003C/span>, code);\n        });\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">processComponents\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Enhanced component syntax: &lt;md-component-name attr=&quot;value&quot;&gt;content&lt;/md-component-name&gt;\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> componentRegex = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">RegExp\u003C/span>(\u003Cspan class=\"hljs-string\">`&lt;\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.options.componentPrefix}\u003C/span>([^\\\\s&gt;]+)([^&gt;]*)&gt;([\\\\s\\\\S]*?)&lt;\\\\/\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.options.componentPrefix}\u003C/span>\\\\1&gt;`\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;gi&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(componentRegex, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, componentName, attributes, innerContent\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">renderComponent\u003C/span>(componentName, attributes, innerContent);\n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">debugMode\u003C/span>) {\n                    \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">`Error rendering component \u003Cspan class=\"hljs-subst\">${componentName}\u003C/span>:`\u003C/span>, error);\n                }\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">renderErrorComponent\u003C/span>(componentName, error.\u003Cspan class=\"hljs-property\">message\u003C/span>);\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">renderComponent\u003C/span>(\u003Cspan class=\"hljs-params\">componentName, attributeString, innerContent\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> component = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(componentName);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!component) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Unknown component: \u003Cspan class=\"hljs-subst\">${componentName}\u003C/span>`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Check rendering depth to prevent infinite recursion\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">depth\u003C/span> &gt;= \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">maxDepth\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Maximum component nesting depth exceeded for \u003Cspan class=\"hljs-subst\">${componentName}\u003C/span>`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Parse attributes\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> attributes = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseAttributes\u003C/span>(attributeString);\n        \n        \u003Cspan class=\"hljs-comment\">// Validate component usage\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">validateComponents\u003C/span> &amp;&amp; !component.\u003Cspan class=\"hljs-title function_\">validate\u003C/span>(attributes, innerContent)) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Invalid component usage for \u003Cspan class=\"hljs-subst\">${componentName}\u003C/span>`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Process nested content if allowed\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> processedContent = innerContent;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (component.\u003Cspan class=\"hljs-property\">allowChildren\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">enableNesting\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">depth\u003C/span>++;\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">allowMarkdownInComponents\u003C/span>) {\n                \u003Cspan class=\"hljs-comment\">// Process nested components first, then let Markdown processor handle the rest\u003C/span>\n                processedContent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processComponents\u003C/span>(innerContent);\n            }\n            \n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">depth\u003C/span>--;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Render the component\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> renderContext = {\n            attributes,\n            \u003Cspan class=\"hljs-attr\">content\u003C/span>: processedContent,\n            \u003Cspan class=\"hljs-attr\">variables\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">variables\u003C/span>,\n            componentName\n        };\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> component.\u003Cspan class=\"hljs-title function_\">render\u003C/span>(renderContext);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseAttributes\u003C/span>(\u003Cspan class=\"hljs-params\">attributeString\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> attributes = {};\n        \n        \u003Cspan class=\"hljs-comment\">// Enhanced attribute parsing with support for various formats\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> attrRegex = \u003Cspan class=\"hljs-regexp\">/(\\w+)(?:=(?:[&quot;&#x27;]([^&quot;&#x27;]*)[&quot;&#x27;]|([^\\s]+)))?/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = attrRegex.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(attributeString)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> name = match[\u003Cspan class=\"hljs-number\">1\u003C/span>];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> value = match[\u003Cspan class=\"hljs-number\">2\u003C/span>] || match[\u003Cspan class=\"hljs-number\">3\u003C/span>] || \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n            attributes[name] = value;\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> attributes;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createCalloutComponent\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">attributes\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;type&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;icon&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;collapsible&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">render\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">{ attributes, content }\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> type = attributes.\u003Cspan class=\"hljs-property\">type\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;info&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> title = attributes.\u003Cspan class=\"hljs-property\">title\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> icon = attributes.\u003Cspan class=\"hljs-property\">icon\u003C/span> || \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getDefaultIcon\u003C/span>(type);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> collapsible = attributes.\u003Cspan class=\"hljs-property\">collapsible\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;true&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> titleHtml = title ? \u003Cspan class=\"hljs-string\">`&lt;div class=&quot;callout-title&quot;&gt;\u003Cspan class=\"hljs-subst\">${icon}\u003C/span> \u003Cspan class=\"hljs-subst\">${title}\u003C/span>&lt;/div&gt;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> contentClass = collapsible ? \u003Cspan class=\"hljs-string\">&#x27;callout-content collapsible&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;callout-content&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n&lt;div class=&quot;callout callout-\u003Cspan class=\"hljs-subst\">${type}\u003C/span>&quot; role=&quot;alert&quot;&gt;\n    \u003Cspan class=\"hljs-subst\">${titleHtml}\u003C/span>\n    &lt;div class=&quot;\u003Cspan class=\"hljs-subst\">${contentClass}\u003C/span>&quot;&gt;\n        \u003Cspan class=\"hljs-subst\">${content}\u003C/span>\n    &lt;/div&gt;\n&lt;/div&gt;`\u003C/span>;\n            },\n            \u003Cspan class=\"hljs-attr\">validate\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">attributes\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> validTypes = [\u003Cspan class=\"hljs-string\">&#x27;info&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;warning&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;error&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;success&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;note&#x27;\u003C/span>];\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> !attributes.\u003Cspan class=\"hljs-property\">type\u003C/span> || validTypes.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(attributes.\u003Cspan class=\"hljs-property\">type\u003C/span>);\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createTabsComponent\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">attributes\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;default-tab&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">render\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">{ attributes, content }\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> defaultTab = attributes[\u003Cspan class=\"hljs-string\">&#x27;default-tab&#x27;\u003C/span>] || \u003Cspan class=\"hljs-number\">0\u003C/span>;\n                \n                \u003Cspan class=\"hljs-comment\">// Parse tab content (simplified - would need more robust parsing)\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> tabs = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseTabContent\u003C/span>(content);\n                \n                \u003Cspan class=\"hljs-keyword\">let\u003C/span> tabsHtml = \u003Cspan class=\"hljs-string\">&#x27;&lt;div class=&quot;tabs-component&quot;&gt;&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-comment\">// Tab headers\u003C/span>\n                tabsHtml += \u003Cspan class=\"hljs-string\">&#x27;&lt;div class=&quot;tab-headers&quot; role=&quot;tablist&quot;&gt;&#x27;\u003C/span>;\n                tabs.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">tab, index\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> isActive = index == defaultTab ? \u003Cspan class=\"hljs-string\">&#x27;active&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                    tabsHtml += \u003Cspan class=\"hljs-string\">`&lt;button class=&quot;tab-header \u003Cspan class=\"hljs-subst\">${isActive}\u003C/span>&quot; \n                                        role=&quot;tab&quot; \n                                        aria-selected=&quot;\u003Cspan class=\"hljs-subst\">${index == defaultTab}\u003C/span>&quot;\n                                        data-tab=&quot;\u003Cspan class=\"hljs-subst\">${index}\u003C/span>&quot;&gt;\n                                    \u003Cspan class=\"hljs-subst\">${tab.title}\u003C/span>\n                                &lt;/button&gt;`\u003C/span>;\n                });\n                tabsHtml += \u003Cspan class=\"hljs-string\">&#x27;&lt;/div&gt;&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-comment\">// Tab content\u003C/span>\n                tabsHtml += \u003Cspan class=\"hljs-string\">&#x27;&lt;div class=&quot;tab-contents&quot;&gt;&#x27;\u003C/span>;\n                tabs.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">tab, index\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> isActive = index == defaultTab ? \u003Cspan class=\"hljs-string\">&#x27;active&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                    tabsHtml += \u003Cspan class=\"hljs-string\">`&lt;div class=&quot;tab-content \u003Cspan class=\"hljs-subst\">${isActive}\u003C/span>&quot; \n                                      role=&quot;tabpanel&quot; \n                                      data-tab=&quot;\u003Cspan class=\"hljs-subst\">${index}\u003C/span>&quot;&gt;\n                                    \u003Cspan class=\"hljs-subst\">${tab.content}\u003C/span>\n                                 &lt;/div&gt;`\u003C/span>;\n                });\n                tabsHtml += \u003Cspan class=\"hljs-string\">&#x27;&lt;/div&gt;&#x27;\u003C/span>;\n                \n                tabsHtml += \u003Cspan class=\"hljs-string\">&#x27;&lt;/div&gt;&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-comment\">// Add JavaScript for tab functionality\u003C/span>\n                tabsHtml += \u003Cspan class=\"hljs-string\">`\n&lt;script&gt;\ndocument.addEventListener(&#x27;DOMContentLoaded&#x27;, function() {\n    const tabComponent = document.querySelector(&#x27;.tabs-component:last-of-type&#x27;);\n    const headers = tabComponent.querySelectorAll(&#x27;.tab-header&#x27;);\n    const contents = tabComponent.querySelectorAll(&#x27;.tab-content&#x27;);\n    \n    headers.forEach(header =&gt; {\n        header.addEventListener(&#x27;click&#x27;, () =&gt; {\n            const tabIndex = header.dataset.tab;\n            \n            // Update headers\n            headers.forEach(h =&gt; {\n                h.classList.remove(&#x27;active&#x27;);\n                h.setAttribute(&#x27;aria-selected&#x27;, &#x27;false&#x27;);\n            });\n            header.classList.add(&#x27;active&#x27;);\n            header.setAttribute(&#x27;aria-selected&#x27;, &#x27;true&#x27;);\n            \n            // Update content\n            contents.forEach(c =&gt; c.classList.remove(&#x27;active&#x27;));\n            const targetContent = tabComponent.querySelector(\\`[data-tab=&quot;\\${tabIndex}&quot;]\\`);\n            if (targetContent) {\n                targetContent.classList.add(&#x27;active&#x27;);\n            }\n        });\n    });\n});\n&lt;/script&gt;`\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> tabsHtml;\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createCodeExampleComponent\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">attributes\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;language&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;filename&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;highlight-lines&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;copy-button&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">render\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">{ attributes, content }\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> language = attributes.\u003Cspan class=\"hljs-property\">language\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;text&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> title = attributes.\u003Cspan class=\"hljs-property\">title\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> filename = attributes.\u003Cspan class=\"hljs-property\">filename\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> highlightLines = attributes[\u003Cspan class=\"hljs-string\">&#x27;highlight-lines&#x27;\u003C/span>] || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> copyButton = attributes[\u003Cspan class=\"hljs-string\">&#x27;copy-button&#x27;\u003C/span>] !== \u003Cspan class=\"hljs-string\">&#x27;false&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> headerContent = title || filename;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> header = headerContent ? \n                    \u003Cspan class=\"hljs-string\">`&lt;div class=&quot;code-header&quot;&gt;\n                        &lt;span class=&quot;code-title&quot;&gt;\u003Cspan class=\"hljs-subst\">${headerContent}\u003C/span>&lt;/span&gt;\n                        \u003Cspan class=\"hljs-subst\">${copyButton ? \u003Cspan class=\"hljs-string\">&#x27;&lt;button class=&quot;copy-button&quot; title=&quot;Copy code&quot;&gt;📋&lt;/button&gt;&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>\n                     &lt;/div&gt;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n&lt;div class=&quot;code-example&quot; data-language=&quot;\u003Cspan class=\"hljs-subst\">${language}\u003C/span>&quot;&gt;\n    \u003Cspan class=\"hljs-subst\">${header}\u003C/span>\n    &lt;pre class=&quot;code-block&quot;&gt;&lt;code class=&quot;language-\u003Cspan class=\"hljs-subst\">${language}\u003C/span>&quot;&gt;\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.escapeHTML(content.trim())}\u003C/span>&lt;/code&gt;&lt;/pre&gt;\n&lt;/div&gt;`\u003C/span>;\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createImageGalleryComponent\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">attributes\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;layout&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;columns&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;lightbox&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">render\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">{ attributes, content }\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> layout = attributes.\u003Cspan class=\"hljs-property\">layout\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;grid&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> columns = attributes.\u003Cspan class=\"hljs-property\">columns\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;3&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> lightbox = attributes.\u003Cspan class=\"hljs-property\">lightbox\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;true&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-comment\">// Parse image content\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> images = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseImageContent\u003C/span>(content);\n                \n                \u003Cspan class=\"hljs-keyword\">let\u003C/span> galleryHtml = \u003Cspan class=\"hljs-string\">`&lt;div class=&quot;image-gallery layout-\u003Cspan class=\"hljs-subst\">${layout}\u003C/span>&quot; style=&quot;--columns: \u003Cspan class=\"hljs-subst\">${columns}\u003C/span>&quot;&gt;`\u003C/span>;\n                \n                images.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">image, index\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> lightboxAttr = lightbox ? \u003Cspan class=\"hljs-string\">`data-lightbox=&quot;gallery&quot; data-index=&quot;\u003Cspan class=\"hljs-subst\">${index}\u003C/span>&quot;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                    galleryHtml += \u003Cspan class=\"hljs-string\">`\n&lt;figure class=&quot;gallery-item&quot;&gt;\n    &lt;img src=&quot;\u003Cspan class=\"hljs-subst\">${image.src}\u003C/span>&quot; \n         alt=&quot;\u003Cspan class=\"hljs-subst\">${image.alt || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>&quot; \n         title=&quot;\u003Cspan class=\"hljs-subst\">${image.title || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>&quot;\n         loading=&quot;lazy&quot;\n         \u003Cspan class=\"hljs-subst\">${lightboxAttr}\u003C/span>&gt;\n    \u003Cspan class=\"hljs-subst\">${image.caption ? \u003Cspan class=\"hljs-string\">`&lt;figcaption&gt;\u003Cspan class=\"hljs-subst\">${image.caption}\u003C/span>&lt;/figcaption&gt;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>\n&lt;/figure&gt;`\u003C/span>;\n                });\n                \n                galleryHtml += \u003Cspan class=\"hljs-string\">&#x27;&lt;/div&gt;&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (lightbox) {\n                    galleryHtml += \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateLightboxScript\u003C/span>();\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> galleryHtml;\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createTableWrapperComponent\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">attributes\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;responsive&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;sortable&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;filterable&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;pagination&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">render\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">{ attributes, content }\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> responsive = attributes.\u003Cspan class=\"hljs-property\">responsive\u003C/span> !== \u003Cspan class=\"hljs-string\">&#x27;false&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> sortable = attributes.\u003Cspan class=\"hljs-property\">sortable\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;true&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> filterable = attributes.\u003Cspan class=\"hljs-property\">filterable\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;true&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> pagination = attributes.\u003Cspan class=\"hljs-property\">pagination\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;true&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">let\u003C/span> wrapperClass = \u003Cspan class=\"hljs-string\">&#x27;table-wrapper&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (responsive) wrapperClass += \u003Cspan class=\"hljs-string\">&#x27; responsive&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (sortable) wrapperClass += \u003Cspan class=\"hljs-string\">&#x27; sortable&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">let\u003C/span> tableHtml = \u003Cspan class=\"hljs-string\">`&lt;div class=&quot;\u003Cspan class=\"hljs-subst\">${wrapperClass}\u003C/span>&quot;&gt;`\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (filterable) {\n                    tableHtml += \u003Cspan class=\"hljs-string\">`\n&lt;div class=&quot;table-controls&quot;&gt;\n    &lt;input type=&quot;text&quot; \n           class=&quot;table-filter&quot; \n           placeholder=&quot;Filter table contents...&quot;\n           aria-label=&quot;Filter table&quot;&gt;\n&lt;/div&gt;`\u003C/span>;\n                }\n                \n                tableHtml += content;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (pagination) {\n                    tableHtml += \u003Cspan class=\"hljs-string\">`\n&lt;div class=&quot;table-pagination&quot;&gt;\n    &lt;button class=&quot;pagination-prev&quot; disabled&gt;Previous&lt;/button&gt;\n    &lt;span class=&quot;pagination-info&quot;&gt;Page 1 of 1&lt;/span&gt;\n    &lt;button class=&quot;pagination-next&quot; disabled&gt;Next&lt;/button&gt;\n&lt;/div&gt;`\u003C/span>;\n                }\n                \n                tableHtml += \u003Cspan class=\"hljs-string\">&#x27;&lt;/div&gt;&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (sortable || filterable || pagination) {\n                    tableHtml += \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateTableEnhancementScript\u003C/span>({\n                        sortable,\n                        filterable,\n                        pagination\n                    });\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> tableHtml;\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createInfoCardComponent\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">attributes\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;variant&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;icon&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;link&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;target&#x27;\u003C/span>],\n            \u003Cspan class=\"hljs-attr\">render\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">{ attributes, content }\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> variant = attributes.\u003Cspan class=\"hljs-property\">variant\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;default&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> icon = attributes.\u003Cspan class=\"hljs-property\">icon\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> link = attributes.\u003Cspan class=\"hljs-property\">link\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> target = attributes.\u003Cspan class=\"hljs-property\">target\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;_self&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> iconHtml = icon ? \u003Cspan class=\"hljs-string\">`&lt;div class=&quot;card-icon&quot;&gt;\u003Cspan class=\"hljs-subst\">${icon}\u003C/span>&lt;/div&gt;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> cardContent = \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${iconHtml}\u003C/span>&lt;div class=&quot;card-content&quot;&gt;\u003Cspan class=\"hljs-subst\">${content}\u003C/span>&lt;/div&gt;`\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (link) {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n&lt;a href=&quot;\u003Cspan class=\"hljs-subst\">${link}\u003C/span>&quot; \n   target=&quot;\u003Cspan class=\"hljs-subst\">${target}\u003C/span>&quot; \n   class=&quot;info-card variant-\u003Cspan class=\"hljs-subst\">${variant}\u003C/span> card-link&quot;&gt;\n    \u003Cspan class=\"hljs-subst\">${cardContent}\u003C/span>\n&lt;/a&gt;`\u003C/span>;\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n&lt;div class=&quot;info-card variant-\u003Cspan class=\"hljs-subst\">${variant}\u003C/span>&quot;&gt;\n    \u003Cspan class=\"hljs-subst\">${cardContent}\u003C/span>\n&lt;/div&gt;`\u003C/span>;\n                }\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseTabContent\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Simplified tab parsing - would need more robust implementation\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> tabs = [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> lines = content.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> currentTab = \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n        \n        lines.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> tabMatch = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^##\\s+(.+)/\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (tabMatch) {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (currentTab) {\n                    tabs.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(currentTab);\n                }\n                currentTab = {\n                    \u003Cspan class=\"hljs-attr\">title\u003C/span>: tabMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>],\n                    \u003Cspan class=\"hljs-attr\">content\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\n                };\n            } \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (currentTab) {\n                currentTab.\u003Cspan class=\"hljs-property\">content\u003C/span> += line + \u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>;\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (currentTab) {\n            tabs.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(currentTab);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> tabs;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseImageContent\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> images = [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> imageRegex = \u003Cspan class=\"hljs-regexp\">/!\\[([^\\]]*)\\]\\(([^)]+)\\)(?:\\s*&quot;([^&quot;]*)&quot;)?/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = imageRegex.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(content)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            images.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                \u003Cspan class=\"hljs-attr\">alt\u003C/span>: match[\u003Cspan class=\"hljs-number\">1\u003C/span>] || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">src\u003C/span>: match[\u003Cspan class=\"hljs-number\">2\u003C/span>],\n                \u003Cspan class=\"hljs-attr\">caption\u003C/span>: match[\u003Cspan class=\"hljs-number\">3\u003C/span>] || match[\u003Cspan class=\"hljs-number\">1\u003C/span>] || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\n            });\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> images;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getDefaultIcon\u003C/span>(\u003Cspan class=\"hljs-params\">type\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> icons = {\n            \u003Cspan class=\"hljs-attr\">info\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;ℹ️&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">warning\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;⚠️&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">error\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;❌&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;✅&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">note\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;📝&#x27;\u003C/span>\n        };\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> icons[type] || \u003Cspan class=\"hljs-string\">&#x27;📄&#x27;\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateLightboxScript\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n&lt;script&gt;\ndocument.addEventListener(&#x27;DOMContentLoaded&#x27;, function() {\n    const galleryImages = document.querySelectorAll(&#x27;[data-lightbox=&quot;gallery&quot;]&#x27;);\n    \n    galleryImages.forEach(img =&gt; {\n        img.addEventListener(&#x27;click&#x27;, function() {\n            // Simple lightbox implementation\n            const lightbox = document.createElement(&#x27;div&#x27;);\n            lightbox.className = &#x27;lightbox&#x27;;\n            lightbox.innerHTML = \\`\n                &lt;div class=&quot;lightbox-content&quot;&gt;\n                    &lt;span class=&quot;lightbox-close&quot;&gt;&amp;times;&lt;/span&gt;\n                    &lt;img src=&quot;\\${img.src}&quot; alt=&quot;\\${img.alt}&quot;&gt;\n                    &lt;div class=&quot;lightbox-caption&quot;&gt;\\${img.title || img.alt}&lt;/div&gt;\n                &lt;/div&gt;\n            \\`;\n            \n            document.body.appendChild(lightbox);\n            \n            lightbox.addEventListener(&#x27;click&#x27;, function(e) {\n                if (e.target === lightbox || e.target.className === &#x27;lightbox-close&#x27;) {\n                    lightbox.remove();\n                }\n            });\n        });\n    });\n});\n&lt;/script&gt;`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateTableEnhancementScript\u003C/span>(\u003Cspan class=\"hljs-params\">features\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n&lt;script&gt;\ndocument.addEventListener(&#x27;DOMContentLoaded&#x27;, function() {\n    const tableWrapper = document.querySelector(&#x27;.table-wrapper:last-of-type&#x27;);\n    const table = tableWrapper.querySelector(&#x27;table&#x27;);\n    \n    \u003Cspan class=\"hljs-subst\">${features.sortable ? \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.generateSortableScript() : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>\n    \u003Cspan class=\"hljs-subst\">${features.filterable ? \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.generateFilterableScript() : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>\n    \u003Cspan class=\"hljs-subst\">${features.pagination ? \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.generatePaginationScript() : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>\n});\n&lt;/script&gt;`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateSortableScript\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n    // Add sorting functionality\n    const headers = table.querySelectorAll(&#x27;th&#x27;);\n    headers.forEach((header, index) =&gt; {\n        header.style.cursor = &#x27;pointer&#x27;;\n        header.addEventListener(&#x27;click&#x27;, () =&gt; sortTable(index));\n    });\n    \n    function sortTable(columnIndex) {\n        const tbody = table.querySelector(&#x27;tbody&#x27;);\n        const rows = Array.from(tbody.rows);\n        const isNumeric = rows.every(row =&gt; !isNaN(row.cells[columnIndex].textContent));\n        \n        rows.sort((a, b) =&gt; {\n            const aVal = a.cells[columnIndex].textContent.trim();\n            const bVal = b.cells[columnIndex].textContent.trim();\n            \n            if (isNumeric) {\n                return parseFloat(aVal) - parseFloat(bVal);\n            } else {\n                return aVal.localeCompare(bVal);\n            }\n        });\n        \n        rows.forEach(row =&gt; tbody.appendChild(row));\n    }`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateFilterableScript\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n    // Add filtering functionality\n    const filterInput = tableWrapper.querySelector(&#x27;.table-filter&#x27;);\n    filterInput.addEventListener(&#x27;input&#x27;, function() {\n        const filterValue = this.value.toLowerCase();\n        const rows = table.querySelectorAll(&#x27;tbody tr&#x27;);\n        \n        rows.forEach(row =&gt; {\n            const text = row.textContent.toLowerCase();\n            row.style.display = text.includes(filterValue) ? &#x27;&#x27; : &#x27;none&#x27;;\n        });\n    });`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generatePaginationScript\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n    // Add pagination functionality\n    const rowsPerPage = 10;\n    let currentPage = 1;\n    const rows = Array.from(table.querySelectorAll(&#x27;tbody tr&#x27;));\n    const totalPages = Math.ceil(rows.length / rowsPerPage);\n    \n    function showPage(page) {\n        const start = (page - 1) * rowsPerPage;\n        const end = start + rowsPerPage;\n        \n        rows.forEach((row, index) =&gt; {\n            row.style.display = (index &gt;= start &amp;&amp; index &lt; end) ? &#x27;&#x27; : &#x27;none&#x27;;\n        });\n        \n        document.querySelector(&#x27;.pagination-info&#x27;).textContent = \n            \\`Page \\${page} of \\${totalPages}\\`;\n        \n        document.querySelector(&#x27;.pagination-prev&#x27;).disabled = page === 1;\n        document.querySelector(&#x27;.pagination-next&#x27;).disabled = page === totalPages;\n    }\n    \n    document.querySelector(&#x27;.pagination-prev&#x27;).addEventListener(&#x27;click&#x27;, () =&gt; {\n        if (currentPage &gt; 1) {\n            currentPage--;\n            showPage(currentPage);\n        }\n    });\n    \n    document.querySelector(&#x27;.pagination-next&#x27;).addEventListener(&#x27;click&#x27;, () =&gt; {\n        if (currentPage &lt; totalPages) {\n            currentPage++;\n            showPage(currentPage);\n        }\n    });\n    \n    showPage(1);`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">renderErrorComponent\u003C/span>(\u003Cspan class=\"hljs-params\">componentName, errorMessage\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\n&lt;div class=&quot;component-error&quot; role=&quot;alert&quot;&gt;\n    &lt;strong&gt;Component Error:&lt;/strong&gt; Failed to render &quot;\u003Cspan class=\"hljs-subst\">${componentName}\u003C/span>&quot; component.\n    \u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.options.debugMode ? \u003Cspan class=\"hljs-string\">`&lt;br&gt;&lt;em&gt;Error: \u003Cspan class=\"hljs-subst\">${errorMessage}\u003C/span>&lt;/em&gt;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>\n&lt;/div&gt;`\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">escapeHTML\u003C/span>(\u003Cspan class=\"hljs-params\">html\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> div = \u003Cspan class=\"hljs-variable language_\">document\u003C/span>.\u003Cspan class=\"hljs-title function_\">createElement\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;div&#x27;\u003C/span>);\n        div.\u003Cspan class=\"hljs-property\">textContent\u003C/span> = html;\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> div.\u003Cspan class=\"hljs-property\">innerHTML\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Public API\u003C/span>\n    \u003Cspan class=\"hljs-title function_\">process\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processDocument\u003C/span>(content);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">addComponent\u003C/span>(\u003Cspan class=\"hljs-params\">name, component\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(name, component);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">removeComponent\u003C/span>(\u003Cspan class=\"hljs-params\">name\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">delete\u003C/span>(name);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">listComponents\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">from\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>());\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setVariable\u003C/span>(\u003Cspan class=\"hljs-params\">name, value\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">variables\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, value);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getVariable\u003C/span>(\u003Cspan class=\"hljs-params\">name\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">renderingContext\u003C/span>.\u003Cspan class=\"hljs-property\">variables\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(name);\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Usage example\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> componentSystem = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownComponentSystem\u003C/span>({\n    \u003Cspan class=\"hljs-attr\">componentPrefix\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;md-&#x27;\u003C/span>,\n    \u003Cspan class=\"hljs-attr\">enableNesting\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n    \u003Cspan class=\"hljs-attr\">allowMarkdownInComponents\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n    \u003Cspan class=\"hljs-attr\">debugMode\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>\n});\n\n\u003Cspan class=\"hljs-comment\">// Example document with custom components\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> documentContent = \u003Cspan class=\"hljs-string\">`\n# Advanced Content Example\n\n&lt;md-callout type=&quot;info&quot; title=&quot;Getting Started&quot;&gt;\nThis is an **informational callout** with Markdown formatting support.\n\n- Feature 1\n- Feature 2\n- Feature 3\n&lt;/md-callout&gt;\n\n&lt;md-tabs default-tab=&quot;0&quot;&gt;\n## JavaScript Example\n\n\\`\\`\\`javascript\nfunction example() {\n    console.log(&quot;Tab content with code&quot;);\n}\n\\`\\`\\`\n\n## Python Example\n\n\\`\\`\\`python\ndef example():\n    print(&quot;Python code example&quot;)\n\\`\\`\\`\n&lt;/md-tabs&gt;\n\n&lt;md-code-example language=&quot;html&quot; title=&quot;Component Usage&quot; copy-button=&quot;true&quot;&gt;\n&lt;md-callout type=&quot;success&quot;&gt;\n    Nested components work seamlessly!\n&lt;/md-callout&gt;\n&lt;/md-code-example&gt;\n\nRegular **Markdown content** continues normally between components.\n`\u003C/span>;\n\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> processedContent = componentSystem.\u003Cspan class=\"hljs-title function_\">process\u003C/span>(documentContent);\n\u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(processedContent);\n\u003C/code>\u003C/pre>\u003Ch2 id=\"responsive-design-integration\">Responsive Design Integration\u003C/h2>\n\u003Ch3 id=\"css-framework-for-html-markdown-integration\">CSS Framework for HTML-Markdown Integration\u003C/h3>\n\u003Cp>Comprehensive styling system for mixed content:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-css\">\u003Cspan class=\"hljs-comment\">/* markdown-html-integration.css - Complete styling for mixed HTML-Markdown content */\u003C/span>\n\n\u003Cspan class=\"hljs-comment\">/* Base responsive grid system for HTML components */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.markdown-content\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">max-width\u003C/span>: \u003Cspan class=\"hljs-number\">1200px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> auto;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">line-height\u003C/span>: \u003Cspan class=\"hljs-number\">1.6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-family\u003C/span>: -apple-system, BlinkMacSystemFont, \u003Cspan class=\"hljs-string\">&#x27;Segoe UI&#x27;\u003C/span>, Roboto, sans-serif;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Component container base styles */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.component-wrapper\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: relative;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Two-column responsive layout */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.two-column-layout\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: grid;\n    \u003Cspan class=\"hljs-attribute\">grid-template-columns\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>fr \u003Cspan class=\"hljs-number\">1\u003C/span>fr;\n    \u003Cspan class=\"hljs-attribute\">gap\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.column\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-left\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span> solid \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-keyword\">@media\u003C/span> (\u003Cspan class=\"hljs-attribute\">max-width\u003C/span>: \u003Cspan class=\"hljs-number\">768px\u003C/span>) {\n    \u003Cspan class=\"hljs-selector-class\">.two-column-layout\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">grid-template-columns\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>fr;\n        \u003Cspan class=\"hljs-attribute\">gap\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">/* Enhanced table styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">width\u003C/span>: \u003Cspan class=\"hljs-number\">100%\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-collapse\u003C/span>: collapse;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">overflow\u003C/span>: hidden;\n    \u003Cspan class=\"hljs-attribute\">box-shadow\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">2px\u003C/span> \u003Cspan class=\"hljs-number\">8px\u003C/span> \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0.1\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> \u003Cspan class=\"hljs-selector-tag\">th\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> \u003Cspan class=\"hljs-selector-tag\">td\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">text-align\u003C/span>: left;\n    \u003Cspan class=\"hljs-attribute\">border-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#e9ecef\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> \u003Cspan class=\"hljs-selector-tag\">th\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#495057\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: \u003Cspan class=\"hljs-number\">600\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: sticky;\n    \u003Cspan class=\"hljs-attribute\">top\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">z-index\u003C/span>: \u003Cspan class=\"hljs-number\">10\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> \u003Cspan class=\"hljs-selector-tag\">tbody\u003C/span> \u003Cspan class=\"hljs-selector-tag\">tr\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> \u003Cspan class=\"hljs-selector-class\">.benefit-list\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding-left\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">list-style\u003C/span>: none;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> \u003Cspan class=\"hljs-selector-class\">.benefit-list\u003C/span> \u003Cspan class=\"hljs-selector-tag\">li\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.25rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: relative;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> \u003Cspan class=\"hljs-selector-class\">.benefit-list\u003C/span> \u003Cspan class=\"hljs-selector-tag\">li\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">::before\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">content\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;✓&#x27;\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#28a745\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: bold;\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: absolute;\n    \u003Cspan class=\"hljs-attribute\">left\u003C/span>: -\u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Responsive table wrapper */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.table-wrapper\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">overflow-x\u003C/span>: auto;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#dee2e6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.table-wrapper\u003C/span>\u003Cspan class=\"hljs-selector-class\">.responsive\u003C/span> \u003Cspan class=\"hljs-selector-tag\">table\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">min-width\u003C/span>: \u003Cspan class=\"hljs-number\">600px\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Table controls styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.table-controls\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#dee2e6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: flex;\n    \u003Cspan class=\"hljs-attribute\">justify-content\u003C/span>: space-between;\n    \u003Cspan class=\"hljs-attribute\">align-items\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">flex-wrap\u003C/span>: wrap;\n    \u003Cspan class=\"hljs-attribute\">gap\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.table-filter\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">flex\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">min-width\u003C/span>: \u003Cspan class=\"hljs-number\">200px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#ced4da\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.table-pagination\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-top\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#dee2e6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: flex;\n    \u003Cspan class=\"hljs-attribute\">justify-content\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">align-items\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">gap\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">flex-wrap\u003C/span>: wrap;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.pagination-prev\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.pagination-next\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.5rem\u003C/span> \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: pointer;\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: background-color \u003Cspan class=\"hljs-number\">0.2s\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.pagination-prev\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:disabled\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.pagination-next\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:disabled\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#6c757d\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: not-allowed;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.pagination-prev\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:not\u003C/span>(\u003Cspan class=\"hljs-selector-pseudo\">:disabled\u003C/span>),\n\u003Cspan class=\"hljs-selector-class\">.pagination-next\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:not\u003C/span>(\u003Cspan class=\"hljs-selector-pseudo\">:disabled\u003C/span>) {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#0056b3\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.pagination-info\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#6c757d\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">min-width\u003C/span>: \u003Cspan class=\"hljs-number\">100px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">text-align\u003C/span>: center;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Form integration styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.markdown-form\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#dee2e6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">box-shadow\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">2px\u003C/span> \u003Cspan class=\"hljs-number\">4px\u003C/span> \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0.05\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-selector-class\">.markdown-form\u003C/span> \u003Cspan class=\"hljs-selector-tag\">fieldset\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.markdown-form\u003C/span> \u003Cspan class=\"hljs-selector-tag\">legend\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">1.25rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: \u003Cspan class=\"hljs-number\">600\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#495057\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">2px\u003C/span> solid \u003Cspan class=\"hljs-number\">#e9ecef\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">width\u003C/span>: \u003Cspan class=\"hljs-number\">100%\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> \u003Cspan class=\"hljs-selector-tag\">label\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: block;\n    \u003Cspan class=\"hljs-attribute\">margin-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: \u003Cspan class=\"hljs-number\">600\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#495057\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> \u003Cspan class=\"hljs-selector-tag\">input\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> select,\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> \u003Cspan class=\"hljs-selector-tag\">textarea\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">width\u003C/span>: \u003Cspan class=\"hljs-number\">100%\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.75rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#ced4da\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: border-color \u003Cspan class=\"hljs-number\">0.2s\u003C/span>, box-shadow \u003Cspan class=\"hljs-number\">0.2s\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> \u003Cspan class=\"hljs-selector-tag\">input\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> select\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> \u003Cspan class=\"hljs-selector-tag\">textarea\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">box-shadow\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">0.2rem\u003C/span> \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">123\u003C/span>, \u003Cspan class=\"hljs-number\">255\u003C/span>, \u003Cspan class=\"hljs-number\">0.25\u003C/span>);\n    \u003Cspan class=\"hljs-attribute\">outline\u003C/span>: none;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.form-group\u003C/span> small {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: block;\n    \u003Cspan class=\"hljs-attribute\">margin-top\u003C/span>: \u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#6c757d\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.875rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.submit-button\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#28a745\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.75rem\u003C/span> \u003Cspan class=\"hljs-number\">1.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: \u003Cspan class=\"hljs-number\">600\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: pointer;\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: background-color \u003Cspan class=\"hljs-number\">0.2s\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.submit-button\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#218838\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Custom component styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.callout\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-left\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span> solid;\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: relative;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-info\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#e7f3ff\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-warning\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#fff3cd\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#ffc107\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-error\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8d7da\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#dc3545\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-success\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#d4edda\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#28a745\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-note\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#6c757d\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-title\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: \u003Cspan class=\"hljs-number\">600\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: flex;\n    \u003Cspan class=\"hljs-attribute\">align-items\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">gap\u003C/span>: \u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-content\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.callout-content\u003C/span>\u003Cspan class=\"hljs-selector-class\">.collapsible\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">max-height\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">overflow\u003C/span>: hidden;\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: max-height \u003Cspan class=\"hljs-number\">0.3s\u003C/span> ease;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Tabs component styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.tabs-component\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#dee2e6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">overflow\u003C/span>: hidden;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.tab-headers\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: flex;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#dee2e6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">flex-wrap\u003C/span>: wrap;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.tab-header\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">flex\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">min-width\u003C/span>: \u003Cspan class=\"hljs-number\">120px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: pointer;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: \u003Cspan class=\"hljs-number\">500\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#6c757d\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: all \u003Cspan class=\"hljs-number\">0.2s\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">3px\u003C/span> solid transparent;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.tab-header\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#e9ecef\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.tab-header\u003C/span>\u003Cspan class=\"hljs-selector-class\">.active\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-bottom-color\u003C/span>: \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.tab-contents\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.tab-content\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.tab-content\u003C/span>\u003Cspan class=\"hljs-selector-class\">.active\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: block;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Code example component styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.code-example\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">overflow\u003C/span>: hidden;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#e1e8ed\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.code-header\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.75rem\u003C/span> \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#e1e8ed\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: flex;\n    \u003Cspan class=\"hljs-attribute\">justify-content\u003C/span>: space-between;\n    \u003Cspan class=\"hljs-attribute\">align-items\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-weight\u003C/span>: \u003Cspan class=\"hljs-number\">600\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#495057\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.code-title\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">flex\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.copy-button\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: pointer;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.25rem\u003C/span> \u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: background-color \u003Cspan class=\"hljs-number\">0.2s\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.copy-button\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#e9ecef\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.code-block\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8f9fa\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-family\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Fira Code&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Monaco&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;Menlo&#x27;\u003C/span>, monospace;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">line-height\u003C/span>: \u003Cspan class=\"hljs-number\">1.5\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">overflow-x\u003C/span>: auto;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Image gallery styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.image-gallery\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.image-gallery\u003C/span>\u003Cspan class=\"hljs-selector-class\">.layout-grid\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: grid;\n    \u003Cspan class=\"hljs-attribute\">grid-template-columns\u003C/span>: \u003Cspan class=\"hljs-built_in\">repeat\u003C/span>(\u003Cspan class=\"hljs-built_in\">var\u003C/span>(--columns, \u003Cspan class=\"hljs-number\">3\u003C/span>), \u003Cspan class=\"hljs-number\">1\u003C/span>fr);\n    \u003Cspan class=\"hljs-attribute\">gap\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.gallery-item\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">overflow\u003C/span>: hidden;\n    \u003Cspan class=\"hljs-attribute\">box-shadow\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">2px\u003C/span> \u003Cspan class=\"hljs-number\">8px\u003C/span> \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0.1\u003C/span>);\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: transform \u003Cspan class=\"hljs-number\">0.2s\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.gallery-item\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">transform\u003C/span>: \u003Cspan class=\"hljs-built_in\">translateY\u003C/span>(-\u003Cspan class=\"hljs-number\">2px\u003C/span>);\n    \u003Cspan class=\"hljs-attribute\">box-shadow\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">4px\u003C/span> \u003Cspan class=\"hljs-number\">12px\u003C/span> \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0.15\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-selector-class\">.gallery-item\u003C/span> \u003Cspan class=\"hljs-selector-tag\">img\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">width\u003C/span>: \u003Cspan class=\"hljs-number\">100%\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">height\u003C/span>: \u003Cspan class=\"hljs-number\">200px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">object-fit\u003C/span>: cover;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: pointer;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.gallery-item\u003C/span> \u003Cspan class=\"hljs-selector-tag\">figcaption\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#495057\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Info card styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: block;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1.5rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#dee2e6\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">box-shadow\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">2px\u003C/span> \u003Cspan class=\"hljs-number\">4px\u003C/span> \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0.05\u003C/span>);\n    \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: all \u003Cspan class=\"hljs-number\">0.2s\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>\u003Cspan class=\"hljs-selector-class\">.card-link\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">text-decoration\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: inherit;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: pointer;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:hover\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">transform\u003C/span>: \u003Cspan class=\"hljs-built_in\">translateY\u003C/span>(-\u003Cspan class=\"hljs-number\">2px\u003C/span>);\n    \u003Cspan class=\"hljs-attribute\">box-shadow\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> \u003Cspan class=\"hljs-number\">4px\u003C/span> \u003Cspan class=\"hljs-number\">12px\u003C/span> \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0.1\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>\u003Cspan class=\"hljs-selector-class\">.variant-primary\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-built_in\">linear-gradient\u003C/span>(\u003Cspan class=\"hljs-number\">135deg\u003C/span>, \u003Cspan class=\"hljs-number\">#e7f3ff\u003C/span> \u003Cspan class=\"hljs-number\">0%\u003C/span>, \u003Cspan class=\"hljs-number\">#ffffff\u003C/span> \u003Cspan class=\"hljs-number\">100%\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>\u003Cspan class=\"hljs-selector-class\">.variant-success\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#28a745\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-built_in\">linear-gradient\u003C/span>(\u003Cspan class=\"hljs-number\">135deg\u003C/span>, \u003Cspan class=\"hljs-number\">#d4edda\u003C/span> \u003Cspan class=\"hljs-number\">0%\u003C/span>, \u003Cspan class=\"hljs-number\">#ffffff\u003C/span> \u003Cspan class=\"hljs-number\">100%\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>\u003Cspan class=\"hljs-selector-class\">.variant-warning\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">border-color\u003C/span>: \u003Cspan class=\"hljs-number\">#ffc107\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-built_in\">linear-gradient\u003C/span>(\u003Cspan class=\"hljs-number\">135deg\u003C/span>, \u003Cspan class=\"hljs-number\">#fff3cd\u003C/span> \u003Cspan class=\"hljs-number\">0%\u003C/span>, \u003Cspan class=\"hljs-number\">#ffffff\u003C/span> \u003Cspan class=\"hljs-number\">100%\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-selector-class\">.card-icon\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin-bottom\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">text-align\u003C/span>: center;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.card-content\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">flex\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Lightbox styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.lightbox\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: fixed;\n    \u003Cspan class=\"hljs-attribute\">top\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">left\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">right\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">bottom\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-built_in\">rgba\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">0.9\u003C/span>);\n    \u003Cspan class=\"hljs-attribute\">display\u003C/span>: flex;\n    \u003Cspan class=\"hljs-attribute\">justify-content\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">align-items\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">z-index\u003C/span>: \u003Cspan class=\"hljs-number\">1000\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">opacity\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">animation\u003C/span>: fadeIn \u003Cspan class=\"hljs-number\">0.3s\u003C/span> forwards;\n}\n\n\u003Cspan class=\"hljs-keyword\">@keyframes\u003C/span> fadeIn {\n    \u003Cspan class=\"hljs-selector-tag\">to\u003C/span> { \u003Cspan class=\"hljs-attribute\">opacity\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>; }\n}\n\n\u003Cspan class=\"hljs-selector-class\">.lightbox-content\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: relative;\n    \u003Cspan class=\"hljs-attribute\">max-width\u003C/span>: \u003Cspan class=\"hljs-number\">90%\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">max-height\u003C/span>: \u003Cspan class=\"hljs-number\">90%\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.lightbox-content\u003C/span> \u003Cspan class=\"hljs-selector-tag\">img\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">max-width\u003C/span>: \u003Cspan class=\"hljs-number\">100%\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">max-height\u003C/span>: \u003Cspan class=\"hljs-number\">100%\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">object-fit\u003C/span>: contain;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.lightbox-close\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: absolute;\n    \u003Cspan class=\"hljs-attribute\">top\u003C/span>: -\u003Cspan class=\"hljs-number\">40px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">right\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">2rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">cursor\u003C/span>: pointer;\n    \u003Cspan class=\"hljs-attribute\">line-height\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.lightbox-caption\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: absolute;\n    \u003Cspan class=\"hljs-attribute\">bottom\u003C/span>: -\u003Cspan class=\"hljs-number\">40px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">left\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">right\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">text-align\u003C/span>: center;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Component error styling */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.component-error\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#f8d7da\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: \u003Cspan class=\"hljs-number\">#721c24\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">margin\u003C/span>: \u003Cspan class=\"hljs-number\">1rem\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#f5c6cb\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.9rem\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Mobile responsive adjustments */\u003C/span>\n\u003Cspan class=\"hljs-keyword\">@media\u003C/span> (\u003Cspan class=\"hljs-attribute\">max-width\u003C/span>: \u003Cspan class=\"hljs-number\">768px\u003C/span>) {\n    \u003Cspan class=\"hljs-selector-class\">.markdown-content\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.image-gallery\u003C/span>\u003Cspan class=\"hljs-selector-class\">.layout-grid\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">grid-template-columns\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>fr;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.tab-headers\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">flex-direction\u003C/span>: column;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.tab-header\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">flex\u003C/span>: none;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.table-controls\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">flex-direction\u003C/span>: column;\n        \u003Cspan class=\"hljs-attribute\">align-items\u003C/span>: stretch;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.table-filter\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">min-width\u003C/span>: auto;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.callout\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.code-example\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">margin-left\u003C/span>: -\u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n        \u003Cspan class=\"hljs-attribute\">margin-right\u003C/span>: -\u003Cspan class=\"hljs-number\">0.5rem\u003C/span>;\n        \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">/* Print styles for mixed content */\u003C/span>\n\u003Cspan class=\"hljs-keyword\">@media\u003C/span> print {\n    \u003Cspan class=\"hljs-selector-class\">.lightbox\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.copy-button\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.tab-headers\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.table-controls\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.table-pagination\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">display\u003C/span>: none \u003Cspan class=\"hljs-meta\">!important\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.tab-content\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">display\u003C/span>: block \u003Cspan class=\"hljs-meta\">!important\u003C/span>;\n        \u003Cspan class=\"hljs-attribute\">page-break-inside\u003C/span>: avoid;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.callout\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.code-example\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">page-break-inside\u003C/span>: avoid;\n        \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">1px\u003C/span> solid \u003Cspan class=\"hljs-number\">#000\u003C/span>;\n        \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white \u003Cspan class=\"hljs-meta\">!important\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">font-size\u003C/span>: \u003Cspan class=\"hljs-number\">0.8rem\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.image-gallery\u003C/span>\u003Cspan class=\"hljs-selector-class\">.layout-grid\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">grid-template-columns\u003C/span>: \u003Cspan class=\"hljs-built_in\">repeat\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-number\">1\u003C/span>fr);\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">/* High contrast mode support */\u003C/span>\n\u003Cspan class=\"hljs-keyword\">@media\u003C/span> (\u003Cspan class=\"hljs-attribute\">prefers-contrast\u003C/span>: high) {\n    \u003Cspan class=\"hljs-selector-class\">.callout\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.enhanced-table\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.code-example\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">border\u003C/span>: \u003Cspan class=\"hljs-number\">2px\u003C/span> solid;\n        \u003Cspan class=\"hljs-attribute\">background\u003C/span>: white;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.tab-header\u003C/span>\u003Cspan class=\"hljs-selector-class\">.active\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">background\u003C/span>: highlight;\n        \u003Cspan class=\"hljs-attribute\">color\u003C/span>: highlighttext;\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">/* Reduced motion support */\u003C/span>\n\u003Cspan class=\"hljs-keyword\">@media\u003C/span> (\u003Cspan class=\"hljs-attribute\">prefers-reduced-motion\u003C/span>: reduce) {\n    \u003Cspan class=\"hljs-selector-class\">.gallery-item\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.callout-content\u003C/span>,\n    \u003Cspan class=\"hljs-selector-class\">.lightbox\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">transition\u003C/span>: none;\n    }\n    \n    \u003Cspan class=\"hljs-selector-class\">.lightbox\u003C/span> {\n        \u003Cspan class=\"hljs-attribute\">animation\u003C/span>: none;\n        \u003Cspan class=\"hljs-attribute\">opacity\u003C/span>: \u003Cspan class=\"hljs-number\">1\u003C/span>;\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">/* Focus management for keyboard navigation */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.tab-header\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.copy-button\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.gallery-item\u003C/span> \u003Cspan class=\"hljs-selector-tag\">img\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span>,\n\u003Cspan class=\"hljs-selector-class\">.info-card\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">outline\u003C/span>: \u003Cspan class=\"hljs-number\">2px\u003C/span> solid \u003Cspan class=\"hljs-number\">#007bff\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">outline-offset\u003C/span>: \u003Cspan class=\"hljs-number\">2px\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-comment\">/* Skip links for accessibility */\u003C/span>\n\u003Cspan class=\"hljs-selector-class\">.skip-to-content\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">position\u003C/span>: absolute;\n    \u003Cspan class=\"hljs-attribute\">top\u003C/span>: -\u003Cspan class=\"hljs-number\">40px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">left\u003C/span>: \u003Cspan class=\"hljs-number\">6px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">background\u003C/span>: \u003Cspan class=\"hljs-number\">#000\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">color\u003C/span>: white;\n    \u003Cspan class=\"hljs-attribute\">padding\u003C/span>: \u003Cspan class=\"hljs-number\">8px\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">text-decoration\u003C/span>: none;\n    \u003Cspan class=\"hljs-attribute\">z-index\u003C/span>: \u003Cspan class=\"hljs-number\">1000\u003C/span>;\n    \u003Cspan class=\"hljs-attribute\">border-radius\u003C/span>: \u003Cspan class=\"hljs-number\">4px\u003C/span>;\n}\n\n\u003Cspan class=\"hljs-selector-class\">.skip-to-content\u003C/span>\u003Cspan class=\"hljs-selector-pseudo\">:focus\u003C/span> {\n    \u003Cspan class=\"hljs-attribute\">top\u003C/span>: \u003Cspan class=\"hljs-number\">6px\u003C/span>;\n}\n\u003C/code>\u003C/pre>\u003Ch2 id=\"platform-specific-integration-patterns\">Platform-Specific Integration Patterns\u003C/h2>\n\u003Ch3 id=\"jekyll-and-liquid-integration\">Jekyll and Liquid Integration\u003C/h3>\n\u003Cp>Advanced Jekyll integration with HTML components:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-liquid\">&lt;!-- _includes/html-component-handler.liquid --&gt;\n&lt;!-- Enhanced HTML component processor for Jekyll --&gt;\n\n{% comment %}\nUsage: {% include html-component-handler.liquid content=page.content %}\n{% endcomment %}\n\n{% assign processed_content = include.content %}\n\n&lt;!-- Process custom HTML components --&gt;\n{% assign component_types = &#39;callout,tabs,code-example,gallery,info-card&#39; | split: &#39;,&#39; %}\n\n{% for component_type in component_types %}\n    {% case component_type %}\n        {% when &#39;callout&#39; %}\n            {% assign processed_content = processed_content | replace: &#39;&lt;md-callout&#39;, &#39;&lt;div class=&quot;callout&#39; %}\n            {% assign processed_content = processed_content | replace: &#39;&lt;/md-callout&gt;&#39;, &#39;&lt;/div&gt;&#39; %}\n        {% when &#39;tabs&#39; %}\n            {% assign processed_content = processed_content | replace: &#39;&lt;md-tabs&#39;, &#39;&lt;div class=&quot;tabs-component&#39; %}\n            {% assign processed_content = processed_content | replace: &#39;&lt;/md-tabs&gt;&#39;, &#39;&lt;/div&gt;&#39; %}\n        {% when &#39;code-example&#39; %}\n            {% assign processed_content = processed_content | replace: &#39;&lt;md-code-example&#39;, &#39;&lt;div class=&quot;code-example&#39; %}\n            {% assign processed_content = processed_content | replace: &#39;&lt;/md-code-example&gt;&#39;, &#39;&lt;/div&gt;&#39; %}\n    {% endcase %}\n{% endfor %}\n\n&lt;!-- Process enhanced attributes --&gt;\n{% assign processed_content = processed_content | replace: &#39;type=&quot;info&quot;&#39;, &#39;class=&quot;callout-info&quot;&#39; %}\n{% assign processed_content = processed_content | replace: &#39;type=&quot;warning&quot;&#39;, &#39;class=&quot;callout-warning&quot;&#39; %}\n{% assign processed_content = processed_content | replace: &#39;type=&quot;error&quot;&#39;, &#39;class=&quot;callout-error&quot;&#39; %}\n\n&lt;!-- Enhanced table processing --&gt;\n{% if processed_content contains &#39;&lt;table&#39; %}\n    {% assign enhanced_tables = processed_content | split: &#39;&lt;table&#39; %}\n    {% assign rebuilt_content = enhanced_tables[0] %}\n    \n    {% for table_part in enhanced_tables offset:1 %}\n        {% if table_part contains &#39;class=&quot;enhanced&quot;&#39; %}\n            {% assign rebuilt_content = rebuilt_content | append: &#39;&lt;div class=&quot;table-wrapper responsive&quot;&gt;&lt;table class=&quot;enhanced-table&quot;&#39; | append: table_part %}\n            {% assign rebuilt_content = rebuilt_content | append: &#39;&lt;/div&gt;&#39; %}\n        {% else %}\n            {% assign rebuilt_content = rebuilt_content | append: &#39;&lt;table&#39; | append: table_part %}\n        {% endif %}\n    {% endfor %}\n    \n    {% assign processed_content = rebuilt_content %}\n{% endif %}\n\n&lt;!-- Output processed content --&gt;\n{{ processed_content }}\n\n&lt;!-- Add required JavaScript for interactive components --&gt;\n&lt;script&gt;\ndocument.addEventListener(&#39;DOMContentLoaded&#39;, function() {\n    // Initialize tabs\n    const tabComponents = document.querySelectorAll(&#39;.tabs-component&#39;);\n    tabComponents.forEach(component =&gt; {\n        initializeTabs(component);\n    });\n    \n    // Initialize copy buttons\n    const copyButtons = document.querySelectorAll(&#39;.copy-button&#39;);\n    copyButtons.forEach(button =&gt; {\n        initializeCopyButton(button);\n    });\n    \n    // Initialize enhanced tables\n    const enhancedTables = document.querySelectorAll(&#39;.enhanced-table&#39;);\n    enhancedTables.forEach(table =&gt; {\n        initializeTableEnhancements(table);\n    });\n});\n\nfunction initializeTabs(component) {\n    const headers = component.querySelectorAll(&#39;.tab-header&#39;);\n    const contents = component.querySelectorAll(&#39;.tab-content&#39;);\n    \n    headers.forEach((header, index) =&gt; {\n        header.addEventListener(&#39;click&#39;, () =&gt; {\n            // Remove active class from all\n            headers.forEach(h =&gt; h.classList.remove(&#39;active&#39;));\n            contents.forEach(c =&gt; c.classList.remove(&#39;active&#39;));\n            \n            // Add active class to clicked\n            header.classList.add(&#39;active&#39;);\n            contents[index].classList.add(&#39;active&#39;);\n        });\n    });\n}\n\nfunction initializeCopyButton(button) {\n    button.addEventListener(&#39;click&#39;, () =&gt; {\n        const codeBlock = button.closest(&#39;.code-example&#39;).querySelector(&#39;code&#39;);\n        if (codeBlock) {\n            navigator.clipboard.writeText(codeBlock.textContent).then(() =&gt; {\n                button.textContent = &#39;✓ Copied!&#39;;\n                setTimeout(() =&gt; {\n                    button.textContent = &#39;📋&#39;;\n                }, 2000);\n            });\n        }\n    });\n}\n\nfunction initializeTableEnhancements(table) {\n    // Add sorting to headers\n    const headers = table.querySelectorAll(&#39;th&#39;);\n    headers.forEach((header, index) =&gt; {\n        header.style.cursor = &#39;pointer&#39;;\n        header.addEventListener(&#39;click&#39;, () =&gt; sortTable(table, index));\n    });\n}\n\nfunction sortTable(table, columnIndex) {\n    const tbody = table.querySelector(&#39;tbody&#39;);\n    const rows = Array.from(tbody.rows);\n    \n    const isNumeric = rows.every(row =&gt; {\n        const cellText = row.cells[columnIndex].textContent.trim();\n        return !isNaN(cellText) &amp;&amp; cellText !== &#39;&#39;;\n    });\n    \n    rows.sort((a, b) =&gt; {\n        const aVal = a.cells[columnIndex].textContent.trim();\n        const bVal = b.cells[columnIndex].textContent.trim();\n        \n        if (isNumeric) {\n            return parseFloat(aVal) - parseFloat(bVal);\n        } else {\n            return aVal.localeCompare(bVal);\n        }\n    });\n    \n    rows.forEach(row =&gt; tbody.appendChild(row));\n}\n&lt;/script&gt;\n\u003C/code>\u003C/pre>\u003Ch3 id=\"hugo-shortcode-integration\">Hugo Shortcode Integration\u003C/h3>\n\u003Cp>Creating powerful shortcodes for HTML-Markdown integration:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-go\">&lt;!-- layouts/shortcodes/enhanced-content.html --&gt;\n{{ $\u003Cspan class=\"hljs-keyword\">type\u003C/span> := .Get \u003Cspan class=\"hljs-string\">&quot;type&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-string\">&quot;info&quot;\u003C/span> }}\n{{ $title := .Get \u003Cspan class=\"hljs-string\">&quot;title&quot;\u003C/span> }}\n{{ $icon := .Get \u003Cspan class=\"hljs-string\">&quot;icon&quot;\u003C/span> }}\n{{ $collapsible := .Get \u003Cspan class=\"hljs-string\">&quot;collapsible&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-literal\">false\u003C/span> }}\n\n{{ $validTypes := slice \u003Cspan class=\"hljs-string\">&quot;info&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;warning&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;error&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;success&quot;\u003C/span> \u003Cspan class=\"hljs-string\">&quot;note&quot;\u003C/span> }}\n{{ $\u003Cspan class=\"hljs-keyword\">type\u003C/span> = cond (in $validTypes $\u003Cspan class=\"hljs-keyword\">type\u003C/span>) $\u003Cspan class=\"hljs-keyword\">type\u003C/span> \u003Cspan class=\"hljs-string\">&quot;info&quot;\u003C/span> }}\n\n&lt;div class=\u003Cspan class=\"hljs-string\">&quot;callout callout-{{ $type }}&quot;\u003C/span> role=\u003Cspan class=\"hljs-string\">&quot;alert&quot;\u003C/span>&gt;\n    {{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $title }}\n        &lt;div class=\u003Cspan class=\"hljs-string\">&quot;callout-title&quot;\u003C/span>&gt;\n            {{ with $icon }}{{ . }}{{ end }}\n            {{ $title }}\n        &lt;/div&gt;\n    {{ end }}\n    \n    &lt;div class=\u003Cspan class=\"hljs-string\">&quot;callout-content{{ if $collapsible }} collapsible{{ end }}&quot;\u003C/span>&gt;\n        {{ .Inner | markdownify }}\n    &lt;/div&gt;\n&lt;/div&gt;\n\n&lt;!-- layouts/shortcodes/tabs.html --&gt;\n{{ $defaultTab := .Get \u003Cspan class=\"hljs-string\">&quot;default&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span> }}\n{{ $tabs := split .Inner \u003Cspan class=\"hljs-string\">&quot;---&quot;\u003C/span> }}\n\n&lt;div class=\u003Cspan class=\"hljs-string\">&quot;tabs-component&quot;\u003C/span>&gt;\n    &lt;div class=\u003Cspan class=\"hljs-string\">&quot;tab-headers&quot;\u003C/span> role=\u003Cspan class=\"hljs-string\">&quot;tablist&quot;\u003C/span>&gt;\n        {{ \u003Cspan class=\"hljs-keyword\">range\u003C/span> $index, $tab := $tabs }}\n            {{ $parts := split $tab \u003Cspan class=\"hljs-string\">&quot;:&quot;\u003C/span> }}\n            {{ $title := index $parts \u003Cspan class=\"hljs-number\">0\u003C/span> | trim }}\n            {{ $isActive := eq $index (\u003Cspan class=\"hljs-type\">int\u003C/span> $defaultTab) }}\n            \n            &lt;button class=\u003Cspan class=\"hljs-string\">&quot;tab-header{{ if $isActive }} active{{ end }}&quot;\u003C/span> \n                    role=\u003Cspan class=\"hljs-string\">&quot;tab&quot;\u003C/span> \n                    aria-selected=\u003Cspan class=\"hljs-string\">&quot;{{ $isActive }}&quot;\u003C/span>\n                    data-tab=\u003Cspan class=\"hljs-string\">&quot;{{ $index }}&quot;\u003C/span>&gt;\n                {{ $title }}\n            &lt;/button&gt;\n        {{ end }}\n    &lt;/div&gt;\n    \n    &lt;div class=\u003Cspan class=\"hljs-string\">&quot;tab-contents&quot;\u003C/span>&gt;\n        {{ \u003Cspan class=\"hljs-keyword\">range\u003C/span> $index, $tab := $tabs }}\n            {{ $parts := split $tab \u003Cspan class=\"hljs-string\">&quot;:&quot;\u003C/span> }}\n            {{ $content := index $parts \u003Cspan class=\"hljs-number\">1\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span> | trim }}\n            {{ $isActive := eq $index (\u003Cspan class=\"hljs-type\">int\u003C/span> $defaultTab) }}\n            \n            &lt;div class=\u003Cspan class=\"hljs-string\">&quot;tab-content{{ if $isActive }} active{{ end }}&quot;\u003C/span> \n                 role=\u003Cspan class=\"hljs-string\">&quot;tabpanel&quot;\u003C/span> \n                 data-tab=\u003Cspan class=\"hljs-string\">&quot;{{ $index }}&quot;\u003C/span>&gt;\n                {{ $content | markdownify }}\n            &lt;/div&gt;\n        {{ end }}\n    &lt;/div&gt;\n&lt;/div&gt;\n\n&lt;!-- layouts/shortcodes/code-example.html --&gt;\n{{ $language := .Get \u003Cspan class=\"hljs-string\">&quot;language&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-string\">&quot;text&quot;\u003C/span> }}\n{{ $title := .Get \u003Cspan class=\"hljs-string\">&quot;title&quot;\u003C/span> }}\n{{ $filename := .Get \u003Cspan class=\"hljs-string\">&quot;filename&quot;\u003C/span> }}\n{{ $copyButton := .Get \u003Cspan class=\"hljs-string\">&quot;copy-button&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span> }}\n\n{{ $headerContent := $title | \u003Cspan class=\"hljs-keyword\">default\u003C/span> $filename }}\n\n&lt;div class=\u003Cspan class=\"hljs-string\">&quot;code-example&quot;\u003C/span> data-language=\u003Cspan class=\"hljs-string\">&quot;{{ $language }}&quot;\u003C/span>&gt;\n    {{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $headerContent }}\n        &lt;div class=\u003Cspan class=\"hljs-string\">&quot;code-header&quot;\u003C/span>&gt;\n            &lt;span class=\u003Cspan class=\"hljs-string\">&quot;code-title&quot;\u003C/span>&gt;{{ $headerContent }}&lt;/span&gt;\n            {{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $copyButton }}\n                &lt;button class=\u003Cspan class=\"hljs-string\">&quot;copy-button&quot;\u003C/span> title=\u003Cspan class=\"hljs-string\">&quot;Copy code&quot;\u003C/span>&gt;📋&lt;/button&gt;\n            {{ end }}\n        &lt;/div&gt;\n    {{ end }}\n    \n    &lt;pre class=\u003Cspan class=\"hljs-string\">&quot;code-block&quot;\u003C/span>&gt;&lt;code class=\u003Cspan class=\"hljs-string\">&quot;language-{{ $language }}&quot;\u003C/span>&gt;{{ .Inner | htmlEscape }}&lt;/code&gt;&lt;/pre&gt;\n&lt;/div&gt;\n\n&lt;!-- layouts/shortcodes/gallery.html --&gt;\n{{ $layout := .Get \u003Cspan class=\"hljs-string\">&quot;layout&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-string\">&quot;grid&quot;\u003C/span> }}\n{{ $columns := .Get \u003Cspan class=\"hljs-string\">&quot;columns&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-string\">&quot;3&quot;\u003C/span> }}\n{{ $lightbox := .Get \u003Cspan class=\"hljs-string\">&quot;lightbox&quot;\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-literal\">false\u003C/span> }}\n\n&lt;div class=\u003Cspan class=\"hljs-string\">&quot;image-gallery layout-{{ $layout }}&quot;\u003C/span> style=\u003Cspan class=\"hljs-string\">&quot;--columns: {{ $columns }}&quot;\u003C/span>&gt;\n    {{ \u003Cspan class=\"hljs-keyword\">range\u003C/span> $index, $image := split .Inner \u003Cspan class=\"hljs-string\">&quot;\\n&quot;\u003C/span> }}\n        {{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $image }}\n            {{ $parts := split $image \u003Cspan class=\"hljs-string\">&quot;|&quot;\u003C/span> }}\n            {{ $src := index $parts \u003Cspan class=\"hljs-number\">0\u003C/span> | trim }}\n            {{ $alt := index $parts \u003Cspan class=\"hljs-number\">1\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;\u003C/span> | trim }}\n            {{ $caption := index $parts \u003Cspan class=\"hljs-number\">2\u003C/span> | \u003Cspan class=\"hljs-keyword\">default\u003C/span> $alt | trim }}\n            \n            {{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $src }}\n                &lt;figure class=\u003Cspan class=\"hljs-string\">&quot;gallery-item&quot;\u003C/span>&gt;\n                    &lt;img src=\u003Cspan class=\"hljs-string\">&quot;{{ $src }}&quot;\u003C/span> \n                         alt=\u003Cspan class=\"hljs-string\">&quot;{{ $alt }}&quot;\u003C/span> \n                         loading=\u003Cspan class=\"hljs-string\">&quot;lazy&quot;\u003C/span>\n                         {{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $lightbox }}data-lightbox=\u003Cspan class=\"hljs-string\">&quot;gallery&quot;\u003C/span> data-index=\u003Cspan class=\"hljs-string\">&quot;{{ $index }}&quot;\u003C/span>{{ end }}&gt;\n                    {{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $caption }}\n                        &lt;figcaption&gt;{{ $caption | markdownify }}&lt;/figcaption&gt;\n                    {{ end }}\n                &lt;/figure&gt;\n            {{ end }}\n        {{ end }}\n    {{ end }}\n&lt;/div&gt;\n\n{{ \u003Cspan class=\"hljs-keyword\">if\u003C/span> $lightbox }}\n    {{ partial \u003Cspan class=\"hljs-string\">&quot;lightbox-script.html&quot;\u003C/span> . }}\n{{ end }}\n\u003C/code>\u003C/pre>\u003Ch2 id=\"integration-with-modern-documentation-systems\">Integration with Modern Documentation Systems\u003C/h2>\n\u003Cp>HTML-Markdown integration complements comprehensive documentation workflows. When combined with \u003Ca href=\"/blog/markdown-content-validation-automated-quality-assurance-complete-guide\">automated content validation and quality assurance\u003C/a>, mixed content systems enable systematic verification of HTML components, accessibility compliance testing, and consistent formatting across complex documentation architectures.\u003C/p>\n\u003Cp>For enhanced content organization, HTML integration works effectively with \u003Ca href=\"/blog/markdown-table-performance-optimization-large-datasets-guide\">advanced table systems and performance optimization\u003C/a> to create sophisticated data presentation interfaces that combine Markdown simplicity with HTML&#39;s advanced layout capabilities, enabling complex data visualization within standard Markdown workflows.\u003C/p>\n\u003Cp>When developing comprehensive content platforms, HTML-Markdown integration supports \u003Ca href=\"/blog/markdown-progressive-web-app-documentation-complete-guide\">Progressive Web App documentation systems\u003C/a> by providing offline-capable interactive components, cached HTML processing, and enhanced user interfaces that maintain functionality across different network conditions and device capabilities.\u003C/p>\n\u003Ch2 id=\"conclusion\">Conclusion\u003C/h2>\n\u003Cp>Markdown HTML integration and mixed content systems transform static documentation into dynamic, interactive experiences that leverage the strengths of both markup languages while maintaining accessibility, performance, and maintainability. By implementing comprehensive HTML sanitization, building reusable component systems, and establishing robust integration patterns, technical teams can create sophisticated content platforms that scale effectively across complex documentation requirements.\u003C/p>\n\u003Cp>The key to successful HTML-Markdown integration lies in establishing clear security boundaries, implementing consistent component architectures, and maintaining semantic HTML practices that enhance rather than compromise accessibility. Whether you&#39;re building technical documentation, educational content, or complex reference materials, the integration techniques covered in this guide provide the foundation for creating powerful, flexible content systems that combine Markdown&#39;s simplicity with HTML&#39;s advanced capabilities.\u003C/p>\n\u003Cp>Remember to prioritize security when accepting mixed content, implement comprehensive testing for cross-platform compatibility, and establish clear guidelines for HTML usage within your Markdown workflows. With proper implementation of HTML-Markdown integration systems, your content can achieve new levels of interactivity and sophistication while maintaining the readability and maintainability that makes Markdown an ideal choice for technical documentation.\u003C/p>\n",[15,19,22,25,28,31,34],{"id":16,"text":17,"level":18},"why-master-html-integration-in-markdown","Why Master HTML Integration in Markdown?",2,{"id":20,"text":21,"level":18},"foundation-html-integration-principles","Foundation HTML Integration Principles",{"id":23,"text":24,"level":18},"advanced-component-systems","Advanced Component Systems",{"id":26,"text":27,"level":18},"responsive-design-integration","Responsive Design Integration",{"id":29,"text":30,"level":18},"platform-specific-integration-patterns","Platform-Specific Integration Patterns",{"id":32,"text":33,"level":18},"integration-with-modern-documentation-systems","Integration with Modern Documentation Systems",{"id":35,"text":36,"level":18},"conclusion","Conclusion",[],[39,47,55],{"slug":40,"title":41,"description":42,"excerpt":43,"date":44,"category":9,"author":10,"keywords":45,"readingMinutes":46},"markdown-custom-html-components-complete-guide","Markdown Custom HTML Components and Extensions: Complete Guide for Dynamic Content Creation and Interactive Documentation","Master Markdown custom HTML components, shortcodes, and extensions for interactive documentation, dynamic content generation, and enhanced reader experiences. Learn component development, templating, and integration strategies.","Advanced Markdown custom HTML components and extensions enable the creation of dynamic, interactive documentation that transcends traditional static content limitations through sophisticated…","2025-10-03","markdown custom components, markdown html extensions, markdown shortcodes, interactive markdown, dynamic markdown content, custom markdown elements, markdown templating, markdown component development",33,{"slug":48,"title":49,"description":50,"excerpt":51,"date":52,"category":9,"author":10,"keywords":53,"readingMinutes":54},"markdown-version-control-git-integration-complete-guide","Markdown Version Control and Git Integration: Complete Guide for Documentation Workflows and Collaborative Content Management","Master Markdown version control with Git integration for collaborative documentation workflows, automated content management, and efficient technical writing processes. Learn Git hooks, merge strategies, and workflow optimization.","Advanced Markdown version control and Git integration enables sophisticated collaborative documentation workflows that maintain content quality, track changes systematically, and automate content…","2025-09-29","markdown version control, git markdown integration, documentation git workflows, markdown collaboration, git hooks markdown, version control documentation, markdown git best practices, collaborative writing git",22,{"slug":56,"title":57,"description":58,"excerpt":59,"date":60,"category":9,"author":10,"keywords":61,"readingMinutes":62},"markdown-emoji-guide-complete-reference","Markdown Emoji Guide: Complete Reference for Technical Documentation and Content Creation","Master emoji usage in Markdown for enhanced technical documentation and content creation. Learn platform-specific implementations, accessibility considerations, and professional best practices for emoji integration.","Emoji integration in Markdown elevates technical documentation and content creation from plain text to engaging, visually enhanced communication that improves reader comprehension and adds…","2025-09-11","markdown emoji, markdown emoticons, github emoji markdown, emoji in documentation, technical writing emoji, markdown symbols, emoji accessibility, professional emoji usage",18,1792184946352]