[{"data":1,"prerenderedAt":71},["Reactive",2],{"blog-post-markdown-indentation-and-nested-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":46,"related":47},"markdown-indentation-and-nested-content-complete-guide","Markdown Indentation and Nested Content: Complete Guide for Complex Document Structures","Master Markdown indentation techniques for nested lists, code blocks, blockquotes, and complex content structures. Learn proper spacing, indentation rules, and troubleshooting for consistent document formatting.","Advanced Markdown indentation and nested content techniques enable sophisticated document structures that maintain readability while supporting complex information hierarchies. By mastering proper…","2025-11-28","Tutorial","Matthew Rathbone","markdown indentation, nested lists markdown, markdown spacing, nested content markdown, markdown formatting rules, code block indentation, blockquote nesting, markdown document structure",13,"\u003Cp>Advanced Markdown indentation and nested content techniques enable sophisticated document structures that maintain readability while supporting complex information hierarchies. By mastering proper indentation rules, spacing conventions, and nesting patterns, technical writers can create well-organized documents that display consistently across different Markdown processors while supporting intricate content relationships and logical information flow.\u003C/p>\n\u003Ch2 id=\"why-master-markdown-indentation-and-nesting\">Why Master Markdown Indentation and Nesting?\u003C/h2>\n\u003Cp>Professional indentation techniques provide essential benefits for document structure:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Hierarchical Organization\u003C/strong>: Create clear information hierarchies with proper nested structures\u003C/li>\n\u003Cli>\u003Cstrong>Visual Clarity\u003C/strong>: Maintain consistent spacing and alignment for improved readability\u003C/li>\n\u003Cli>\u003Cstrong>Content Relationships\u003C/strong>: Express logical connections between related information elements\u003C/li>\n\u003Cli>\u003Cstrong>Cross-Platform Consistency\u003C/strong>: Ensure documents render correctly across different Markdown processors\u003C/li>\n\u003Cli>\u003Cstrong>Accessibility\u003C/strong>: Support screen readers and assistive technologies with proper document structure\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"foundation-indentation-principles\">Foundation Indentation Principles\u003C/h2>\n\u003Ch3 id=\"basic-indentation-rules\">Basic Indentation Rules\u003C/h3>\n\u003Cp>Understanding fundamental spacing and indentation requirements:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Core Indentation Principles\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Lists with Proper Nesting\u003C/span>\n\n\u003Cspan class=\"hljs-section\">### Unordered Lists\u003C/span>\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> First level item\n\u003Cspan class=\"hljs-bullet\">  -\u003C/span> Second level item (2 spaces)\n\u003Cspan class=\"hljs-bullet\">    -\u003C/span> Third level item (4 spaces)\n\u003Cspan class=\"hljs-bullet\">      -\u003C/span> Fourth level item (6 spaces)\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> Another first level item\n\u003Cspan class=\"hljs-bullet\">  -\u003C/span> Mixed content in nested lists\n\u003Cspan class=\"hljs-code\">    ```javascript\n    // Code block within nested list (4 space indent + 4 space code indent)\n    function example() {\n        return &quot;Properly indented code&quot;;\n    }\n    ```\n  - Continued list item after code\n\u003C/span>\n\u003Cspan class=\"hljs-section\">### Ordered Lists\u003C/span>\n\u003Cspan class=\"hljs-bullet\">1.\u003C/span> First numbered item\n\u003Cspan class=\"hljs-bullet\">   1.\u003C/span> Nested numbered item (3 spaces to align with parent text)\n\u003Cspan class=\"hljs-bullet\">      1.\u003C/span> Deep nested item\n\u003Cspan class=\"hljs-bullet\">   2.\u003C/span> Second nested item\n\u003Cspan class=\"hljs-bullet\">2.\u003C/span> Second top-level item\n\u003Cspan class=\"hljs-bullet\">   -\u003C/span> Mixed list types (unordered nested in ordered)\n\u003Cspan class=\"hljs-bullet\">     1.\u003C/span> Further nesting\n\u003Cspan class=\"hljs-bullet\">     2.\u003C/span> Maintains proper alignment\n\n\u003Cspan class=\"hljs-section\">## Blockquotes with Nesting\u003C/span>\n\n\u003Cspan class=\"hljs-quote\">&gt; First level blockquote\u003C/span>\n\u003Cspan class=\"hljs-quote\">&gt; \n&gt; &gt; Nested blockquote (additional &gt; with space)\u003C/span>\n\u003Cspan class=\"hljs-quote\">&gt; &gt; \u003C/span>\n\u003Cspan class=\"hljs-quote\">&gt; &gt; &gt; Triple nested blockquote\u003C/span>\n\u003Cspan class=\"hljs-quote\">&gt; &gt; &gt; \u003C/span>\n\u003Cspan class=\"hljs-quote\">&gt; &gt; &gt; - Lists can be nested in blockquotes\u003C/span>\n\u003Cspan class=\"hljs-quote\">&gt; &gt; &gt;   - With proper indentation\u003C/span>\n\u003Cspan class=\"hljs-quote\">&gt; \n&gt; Back to first level blockquote\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"spacing-rules-for-different-elements\">Spacing Rules for Different Elements\u003C/h3>\n\u003Cp>Consistent spacing patterns across content types:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Spacing Guidelines for Content Elements\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Code Blocks in Lists\u003C/span>\n\n\u003Cspan class=\"hljs-bullet\">1.\u003C/span> First item with code example:\n\n   \u003Cspan class=\"hljs-code\">```python\n   # Code block indented to match list content (3 spaces)\n   def process_data(data):\n       return [item.strip() for item in data]\u003C/span>\n\u003C/code>\u003C/pre>\u003Col start=\"2\">\n\u003Cli>Second item continues the list\u003Cul>\n\u003Cli>\u003Cp>Nested item with inline code: \u003Ccode>variable_name\u003C/code>\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Another nested item with block code:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-comment\"># Additional indentation for nested code (5 spaces)\u003C/span>\n\u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;This is properly nested&quot;\u003C/span>\n\u003C/code>\u003C/pre>\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003C/ol>\n\u003Ch2 id=\"paragraphs-in-lists\">Paragraphs in Lists\u003C/h2>\n\u003Col>\n\u003Cli>\u003Cp>First item with multiple paragraphs:\u003C/p>\n\u003Cp>This is the first paragraph of the list item. It should be\u003Cbr>indented to align with the list content.\u003C/p>\n\u003Cp>This is the second paragraph. Notice the blank line above\u003Cbr>and the consistent indentation.\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Second list item with different content types:\u003C/p>\n\u003Cblockquote>\n\u003Cp>This is a blockquote within a list item.\u003Cbr>It maintains proper indentation relative to the list.\u003C/p>\n\u003C/blockquote>\n\u003Cp>And this paragraph follows the blockquote.\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003Ch2 id=\"tables-in-nested-content\">Tables in Nested Content\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cp>List item containing a table:\u003C/p>\n\u003Cdiv class=\"table-responsive\">\u003Ctable class=\"table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Column 1\u003C/th>\n\u003Cth>Column 2\u003C/th>\n\u003Cth>Column 3\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Data 1\u003C/td>\n\u003Ctd>Data 2\u003C/td>\n\u003Ctd>Data 3\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Row 2\u003C/td>\n\u003Ctd>Row 2\u003C/td>\n\u003Ctd>Row 2\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\u003C/div>\n\u003Cp>Table caption or description continues the list item.\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Another list item after the table\u003C/p>\n\u003C/li>\n\u003C/ul>\n\u003Cpre>\u003Ccode>\n### Advanced Nesting Patterns\n\nComplex content structures with multiple nesting levels:\n\n```markdown\n# Complex Nesting Examples\n\n## Multi-Level Content Hierarchies\n\n1. **Project Setup Instructions**\n   \n   Begin by creating the project structure:\n   \n   ```bash\n   mkdir my-project\n   cd my-project\n\u003C/code>\u003C/pre>\u003Col>\n\u003Cli>\u003Cp>\u003Cstrong>Initialize the repository:\u003C/strong>\u003C/p>\n\u003Cp>Set up version control for the project:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-bash\">git init\n\u003Cspan class=\"hljs-built_in\">echo\u003C/span> \u003Cspan class=\"hljs-string\">&quot;# My Project&quot;\u003C/span> &gt; README.md\ngit add README.md\ngit commit -m \u003Cspan class=\"hljs-string\">&quot;Initial commit&quot;\u003C/span>\n\u003C/code>\u003C/pre>\u003Cblockquote>\n\u003Cp>\u003Cstrong>Note\u003C/strong>: Always create a meaningful initial commit message\u003Cbr>that describes the project purpose.\u003C/p>\n\u003C/blockquote>\n\u003C/li>\n\u003Cli>\u003Cp>\u003Cstrong>Configure the environment:\u003C/strong>\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cp>Create configuration files:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-comment\"># config.yml\u003C/span>\n\u003Cspan class=\"hljs-attr\">project:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">my-project\u003C/span>\n  \u003Cspan class=\"hljs-attr\">version:\u003C/span> \u003Cspan class=\"hljs-number\">1.0\u003C/span>\u003Cspan class=\"hljs-number\">.0\u003C/span>\n  \u003Cspan class=\"hljs-attr\">dependencies:\u003C/span>\n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">dependency-1\u003C/span>\n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">dependency-2\u003C/span>\n\u003C/code>\u003C/pre>\u003C/li>\n\u003Cli>\u003Cp>Set up environment variables:\u003C/p>\n\u003Col>\n\u003Cli>\u003Cp>Create \u003Ccode>.env\u003C/code> file\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Add necessary variables:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-bash\">NODE_ENV=development\nPORT=3000\nDATABASE_URL=localhost:5432/myproject\n\u003C/code>\u003C/pre>\u003C/li>\n\u003Cli>\u003Cp>Load variables in your application\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cp>\u003Cstrong>Documentation Structure\u003C/strong>\u003C/p>\n\u003Cp>Create comprehensive documentation:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cp>\u003Cstrong>User Documentation\u003C/strong>\u003C/p>\n\u003Cul>\n\u003Cli>Installation guide\u003C/li>\n\u003Cli>Quick start tutorial\u003C/li>\n\u003Cli>Feature overview\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cp>\u003Cstrong>Developer Documentation\u003C/strong>\u003C/p>\n\u003Cul>\n\u003Cli>API reference\u003C/li>\n\u003Cli>Contributing guidelines\u003C/li>\n\u003Cli>Architecture overview\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>\u003Cp>\u003Cstrong>Testing Configuration\u003C/strong>\u003C/p>\n\u003Cp>Set up comprehensive testing:\u003C/p>\n\u003Cblockquote>\n\u003Cp>Testing is crucial for maintaining code quality.\u003Cbr>Follow these practices for effective testing.\u003C/p>\n\u003C/blockquote>\n\u003Cul>\n\u003Cli>\u003Cp>\u003Cstrong>Unit Tests\u003C/strong>\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// test/unit/example.test.js\u003C/span>\n\u003Cspan class=\"hljs-title function_\">describe\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Example function&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">it\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;should return expected result&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> result = \u003Cspan class=\"hljs-title function_\">exampleFunction\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;input&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-title function_\">expect\u003C/span>(result).\u003Cspan class=\"hljs-title function_\">toBe\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;expected output&#x27;\u003C/span>);\n    });\n    \n    \u003Cspan class=\"hljs-title function_\">it\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;should handle edge cases&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n        \u003Cspan class=\"hljs-comment\">// Test edge case scenarios\u003C/span>\n        \u003Cspan class=\"hljs-title function_\">expect\u003C/span>(\u003Cspan class=\"hljs-title function_\">exampleFunction\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>)).\u003Cspan class=\"hljs-title function_\">toBe\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-title function_\">expect\u003C/span>(\u003Cspan class=\"hljs-title function_\">exampleFunction\u003C/span>(\u003Cspan class=\"hljs-literal\">null\u003C/span>)).\u003Cspan class=\"hljs-title function_\">toBe\u003C/span>(\u003Cspan class=\"hljs-literal\">null\u003C/span>);\n    });\n});\n\u003C/code>\u003C/pre>\u003C/li>\n\u003Cli>\u003Cp>\u003Cstrong>Integration Tests\u003C/strong>\u003C/p>\n\u003Col>\n\u003Cli>\u003Cp>Set up test database\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Create test fixtures\u003C/p>\n\u003C/li>\n\u003Cli>\u003Cp>Run end-to-end scenarios:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// test/integration/api.test.js\u003C/span>\n\u003Cspan class=\"hljs-title function_\">describe\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;API endpoints&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">beforeEach\u003C/span>(\u003Cspan class=\"hljs-keyword\">async\u003C/span> () =&gt; {\n        \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">setupTestDatabase\u003C/span>();\n    });\n    \n    \u003Cspan class=\"hljs-title function_\">it\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;should create new resource&#x27;\u003C/span>, \u003Cspan class=\"hljs-keyword\">async\u003C/span> () =&gt; {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> response = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">request\u003C/span>(app)\n            .\u003Cspan class=\"hljs-title function_\">post\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;/api/resources&#x27;\u003C/span>)\n            .\u003Cspan class=\"hljs-title function_\">send\u003C/span>({ \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Test Resource&#x27;\u003C/span> });\n        \n        \u003Cspan class=\"hljs-title function_\">expect\u003C/span>(response.\u003Cspan class=\"hljs-property\">status\u003C/span>).\u003Cspan class=\"hljs-title function_\">toBe\u003C/span>(\u003Cspan class=\"hljs-number\">201\u003C/span>);\n        \u003Cspan class=\"hljs-title function_\">expect\u003C/span>(response.\u003Cspan class=\"hljs-property\">body\u003C/span>.\u003Cspan class=\"hljs-property\">name\u003C/span>).\u003Cspan class=\"hljs-title function_\">toBe\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Test Resource&#x27;\u003C/span>);\n    });\n});\n\u003C/code>\u003C/pre>\u003C/li>\n\u003C/ol>\n\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003C/ol>\n\u003Cpre>\u003Ccode>\n## Platform-Specific Indentation Considerations\n\n### GitHub Flavored Markdown\n\nGitHub&#39;s specific rendering requirements and best practices:\n\n```markdown\n# GitHub-Specific Indentation Guidelines\n\n## Task Lists with Nesting\n\n- [ ] Main project milestone\n  - [ ] Subtask 1: Research phase\n    - [ ] Literature review\n    - [ ] Competitive analysis\n    - [x] Initial findings documented\n  - [ ] Subtask 2: Development phase\n    - [x] Environment setup\n    - [ ] Core feature implementation\n    - [ ] Testing and validation\n  - [ ] Subtask 3: Documentation\n    - [ ] User guide creation\n    - [ ] API documentation\n    - [ ] Deployment instructions\n\n## Code Blocks with Line Numbers\n\nWhen documenting code with specific line references:\n\n```python\ndef process_user_data(users):\n    &quot;&quot;&quot;\n    Process user data with proper error handling.\n    \n    Args:\n        users (list): List of user dictionaries\n        \n    Returns:\n        list: Processed user data\n    &quot;&quot;&quot;\n    processed_users = []\n    \n    for user in users:\n        try:\n            # Validate required fields\n            if not user.get(&#39;email&#39;):\n                continue\n                \n            # Process user information\n            processed_user = {\n                &#39;id&#39;: user[&#39;id&#39;],\n                &#39;email&#39;: user[&#39;email&#39;].lower(),\n                &#39;name&#39;: user.get(&#39;name&#39;, &#39;&#39;).strip(),\n                &#39;status&#39;: &#39;active&#39;\n            }\n            \n            processed_users.append(processed_user)\n            \n        except KeyError as e:\n            print(f&quot;Missing required field: {e}&quot;)\n            continue\n            \n    return processed_users\n\u003C/code>\u003C/pre>\u003Cp>Reference specific lines in documentation:\u003C/p>\n\u003Cul>\n\u003Cli>Line 15-20: User data processing logic\u003C/li>\n\u003Cli>Line 22: Error handling for missing fields\u003C/li>\n\u003C/ul>\n\u003Cpre>\u003Ccode>\n### Jekyll and Static Site Generators\n\nHandling indentation in Jekyll and similar systems:\n\n````markdown\n# Jekyll-Specific Indentation Patterns\n\n## Liquid Template Integration\n\nWhen mixing Markdown with Liquid templates:\n\n\n```liquid\n&lt;!-- _includes/nested-navigation.html --&gt;\n&lt;nav class=&quot;documentation-nav&quot;&gt;\n  &lt;ul&gt;\n    {% for section in site.data.navigation %}\n      &lt;li class=&quot;nav-section&quot;&gt;\n        &lt;h3&gt;{{ section.title }}&lt;/h3&gt;\n        &lt;ul&gt;\n          {% for page in section.pages %}\n            &lt;li&gt;\n              &lt;a href=&quot;{{ page.url | relative_url }}&quot;&gt;\n                {{ page.title }}\n              &lt;/a&gt;\n              {% if page.subsections %}\n                &lt;ul class=&quot;subsections&quot;&gt;\n                  {% for subsection in page.subsections %}\n                    &lt;li&gt;\n                      &lt;a href=&quot;{{ page.url | relative_url }}#{{ subsection.anchor }}&quot;&gt;\n                        {{ subsection.title }}\n                      &lt;/a&gt;\n                    &lt;/li&gt;\n                  {% endfor %}\n                &lt;/ul&gt;\n              {% endif %}\n            &lt;/li&gt;\n          {% endfor %}\n        &lt;/ul&gt;\n      &lt;/li&gt;\n    {% endfor %}\n  &lt;/ul&gt;\n&lt;/nav&gt;\n\u003C/code>\u003C/pre>\u003Ch2 id=\"front-matter-with-complex-structures\">Front Matter with Complex Structures\u003C/h2>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-meta\">---\u003C/span>\n\u003Cspan class=\"hljs-attr\">title:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Complex Document with Metadata&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">description:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Detailed description of the content&quot;\u003C/span>\n\u003Cspan class=\"hljs-attr\">categories:\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">documentation\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">tutorials\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">advanced\u003C/span>\n\u003Cspan class=\"hljs-attr\">tags:\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">markdown\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">indentation\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-string\">formatting\u003C/span>\n\u003Cspan class=\"hljs-attr\">navigation:\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">title:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Getting Started&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">sections:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Installation&quot;\u003C/span>\n        \u003Cspan class=\"hljs-attr\">url:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;#installation&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Configuration&quot;\u003C/span>\n        \u003Cspan class=\"hljs-attr\">url:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;#configuration&quot;\u003C/span>\n  \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">title:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Advanced Topics&quot;\u003C/span>\n    \u003Cspan class=\"hljs-attr\">sections:\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Nesting&quot;\u003C/span>\n        \u003Cspan class=\"hljs-attr\">url:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;#nesting&quot;\u003C/span>\n      \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Troubleshooting&quot;\u003C/span>\n        \u003Cspan class=\"hljs-attr\">url:\u003C/span> \u003Cspan class=\"hljs-string\">&quot;#troubleshooting&quot;\u003C/span>\n\u003Cspan class=\"hljs-meta\">---\u003C/span>\n\u003C/code>\u003C/pre>\u003Cp>````\u003C/p>\n\u003Ch3 id=\"documentation-platform-compatibility\">Documentation Platform Compatibility\u003C/h3>\n\u003Cp>Ensuring consistent rendering across platforms:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// indentation-validator.js - Cross-platform indentation validator\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownIndentationValidator\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">rules\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">listIndentation\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>,      \u003Cspan class=\"hljs-comment\">// Spaces per nesting level\u003C/span>\n            \u003Cspan class=\"hljs-attr\">codeBlockIndentation\u003C/span>: \u003Cspan class=\"hljs-number\">4\u003C/span>, \u003Cspan class=\"hljs-comment\">// Code block base indentation\u003C/span>\n            \u003Cspan class=\"hljs-attr\">blockquoteNesting\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>,    \u003Cspan class=\"hljs-comment\">// Additional &gt; characters per level\u003C/span>\n            \u003Cspan class=\"hljs-attr\">tableIndentation\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>      \u003Cspan class=\"hljs-comment\">// Tables at block level\u003C/span>\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">platforms\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">github\u003C/span>: { \u003Cspan class=\"hljs-attr\">listIndentation\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-attr\">preservesSpacing\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> },\n            \u003Cspan class=\"hljs-attr\">gitlab\u003C/span>: { \u003Cspan class=\"hljs-attr\">listIndentation\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-attr\">preservesSpacing\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> },\n            \u003Cspan class=\"hljs-attr\">commonmark\u003C/span>: { \u003Cspan class=\"hljs-attr\">listIndentation\u003C/span>: \u003Cspan class=\"hljs-number\">4\u003C/span>, \u003Cspan class=\"hljs-attr\">preservesSpacing\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span> },\n            \u003Cspan class=\"hljs-attr\">kramdown\u003C/span>: { \u003Cspan class=\"hljs-attr\">listIndentation\u003C/span>: \u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-attr\">preservesSpacing\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">validateDocument\u003C/span>(\u003Cspan class=\"hljs-params\">markdownContent, targetPlatform = \u003Cspan class=\"hljs-string\">&#x27;github&#x27;\u003C/span>\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> lines = markdownContent.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> issues = [];\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> inCodeBlock = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> codeBlockIndent = \u003Cspan class=\"hljs-number\">0\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> listStack = [];\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">0\u003C/span>; i &lt; lines.\u003Cspan class=\"hljs-property\">length\u003C/span>; i++) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> line = lines[i];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> lineNumber = i + \u003Cspan class=\"hljs-number\">1\u003C/span>;\n            \n            \u003Cspan class=\"hljs-comment\">// Skip empty lines\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>() === \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            \n            \u003Cspan class=\"hljs-comment\">// Handle code blocks\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>)) {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (inCodeBlock) {\n                    inCodeBlock = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n                    codeBlockIndent = \u003Cspan class=\"hljs-number\">0\u003C/span>;\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                    inCodeBlock = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n                    codeBlockIndent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getLeadingSpaces\u003C/span>(line);\n                }\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (inCodeBlock) {\n                \u003Cspan class=\"hljs-comment\">// Validate code block indentation\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> expectedIndent = codeBlockIndent;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> actualIndent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getLeadingSpaces\u003C/span>(line);\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>() !== \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span> &amp;&amp; actualIndent &lt; expectedIndent) {\n                    issues.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                        \u003Cspan class=\"hljs-attr\">line\u003C/span>: lineNumber,\n                        \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;code-block-indentation&#x27;\u003C/span>,\n                        \u003Cspan class=\"hljs-attr\">message\u003C/span>: \u003Cspan class=\"hljs-string\">`Code line not properly indented (expected \u003Cspan class=\"hljs-subst\">${expectedIndent}\u003C/span>, got \u003Cspan class=\"hljs-subst\">${actualIndent}\u003C/span>)`\u003C/span>\n                    });\n                }\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Validate list indentation\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> listMatch = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)[-*+]\\s/\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (listMatch) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> indent = listMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> expectedLevel = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">floor\u003C/span>(indent / \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">rules\u003C/span>.\u003Cspan class=\"hljs-property\">listIndentation\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (indent % \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">rules\u003C/span>.\u003Cspan class=\"hljs-property\">listIndentation\u003C/span> !== \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n                    issues.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                        \u003Cspan class=\"hljs-attr\">line\u003C/span>: lineNumber,\n                        \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list-indentation&#x27;\u003C/span>,\n                        \u003Cspan class=\"hljs-attr\">message\u003C/span>: \u003Cspan class=\"hljs-string\">`List item indentation not aligned to \u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.rules.listIndentation}\u003C/span>-space grid`\u003C/span>\n                    });\n                }\n                \n                \u003Cspan class=\"hljs-comment\">// Update list stack\u003C/span>\n                listStack = listStack.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, expectedLevel);\n                listStack.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({ \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;unordered&#x27;\u003C/span>, indent });\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Validate ordered list indentation\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> orderedListMatch = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)\\d+\\.\\s/\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (orderedListMatch) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> indent = orderedListMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span>;\n                \n                \u003Cspan class=\"hljs-comment\">// Ordered lists should align with their parent content\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (listStack.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> parentIndent = listStack[listStack.\u003Cspan class=\"hljs-property\">length\u003C/span> - \u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">indent\u003C/span>;\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> expectedIndent = parentIndent + \u003Cspan class=\"hljs-number\">3\u003C/span>; \u003Cspan class=\"hljs-comment\">// Account for &quot;1. &quot; prefix\u003C/span>\n                    \n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (indent !== expectedIndent &amp;&amp; \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">abs\u003C/span>(indent - expectedIndent) &gt; \u003Cspan class=\"hljs-number\">1\u003C/span>) {\n                        issues.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                            \u003Cspan class=\"hljs-attr\">line\u003C/span>: lineNumber,\n                            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;ordered-list-indentation&#x27;\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">message\u003C/span>: \u003Cspan class=\"hljs-string\">`Ordered list not properly aligned with parent (expected ~\u003Cspan class=\"hljs-subst\">${expectedIndent}\u003C/span>, got \u003Cspan class=\"hljs-subst\">${indent}\u003C/span>)`\u003C/span>\n                        });\n                    }\n                }\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Validate blockquote nesting\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> blockquoteMatch = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)(&gt;+)\\s/\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (blockquoteMatch) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> spaces = blockquoteMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> level = blockquoteMatch[\u003Cspan class=\"hljs-number\">2\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (spaces !== \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n                    issues.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                        \u003Cspan class=\"hljs-attr\">line\u003C/span>: lineNumber,\n                        \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;blockquote-indentation&#x27;\u003C/span>,\n                        \u003Cspan class=\"hljs-attr\">message\u003C/span>: \u003Cspan class=\"hljs-string\">`Blockquotes should start at column 0, not indented by \u003Cspan class=\"hljs-subst\">${spaces}\u003C/span> spaces`\u003C/span>\n                    });\n                }\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Validate continuation lines in lists\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (listStack.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> &amp;&amp; !line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)[-*+&gt;]\\s/\u003C/span>) &amp;&amp; !line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>)) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> lineIndent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getLeadingSpaces\u003C/span>(line);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> expectedIndent = listStack[listStack.\u003Cspan class=\"hljs-property\">length\u003C/span> - \u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">indent\u003C/span> + \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">rules\u003C/span>.\u003Cspan class=\"hljs-property\">listIndentation\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (lineIndent &lt; expectedIndent &amp;&amp; line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>() !== \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) {\n                    issues.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                        \u003Cspan class=\"hljs-attr\">line\u003C/span>: lineNumber,\n                        \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;list-continuation&#x27;\u003C/span>,\n                        \u003Cspan class=\"hljs-attr\">message\u003C/span>: \u003Cspan class=\"hljs-string\">`Line content should be indented to match list item (expected \u003Cspan class=\"hljs-subst\">${expectedIndent}\u003C/span>, got \u003Cspan class=\"hljs-subst\">${lineIndent}\u003C/span>)`\u003C/span>\n                    });\n                }\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">isValid\u003C/span>: issues.\u003Cspan class=\"hljs-property\">length\u003C/span> === \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            issues,\n            \u003Cspan class=\"hljs-attr\">summary\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateSummary\u003C/span>(issues)\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getLeadingSpaces\u003C/span>(\u003Cspan class=\"hljs-params\">line\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> match = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)/\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> match ? match[\u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span> : \u003Cspan class=\"hljs-number\">0\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateSummary\u003C/span>(\u003Cspan class=\"hljs-params\">issues\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> summary = {\n            \u003Cspan class=\"hljs-attr\">total\u003C/span>: issues.\u003Cspan class=\"hljs-property\">length\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">byType\u003C/span>: {}\n        };\n        \n        issues.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">issue\u003C/span> =&gt;\u003C/span> {\n            summary.\u003Cspan class=\"hljs-property\">byType\u003C/span>[issue.\u003Cspan class=\"hljs-property\">type\u003C/span>] = (summary.\u003Cspan class=\"hljs-property\">byType\u003C/span>[issue.\u003Cspan class=\"hljs-property\">type\u003C/span>] || \u003Cspan class=\"hljs-number\">0\u003C/span>) + \u003Cspan class=\"hljs-number\">1\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> summary;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">fixIndentation\u003C/span>(\u003Cspan class=\"hljs-params\">markdownContent, options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> lines = markdownContent.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> fixedLines = [];\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> listStack = [];\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> inCodeBlock = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> line \u003Cspan class=\"hljs-keyword\">of\u003C/span> lines) {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>() === \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) {\n                fixedLines.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(line);\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Handle code blocks\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>)) {\n                inCodeBlock = !inCodeBlock;\n                fixedLines.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(line);\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (inCodeBlock) {\n                fixedLines.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(line);\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Fix list indentation\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> listMatch = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)[-*+]\\s(.*)$/\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (listMatch) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> currentIndent = listMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = listMatch[\u003Cspan class=\"hljs-number\">2\u003C/span>];\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> level = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">round\u003C/span>(currentIndent / \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">rules\u003C/span>.\u003Cspan class=\"hljs-property\">listIndentation\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> correctedIndent = level * \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">rules\u003C/span>.\u003Cspan class=\"hljs-property\">listIndentation\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> fixedLine = \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(correctedIndent) + \u003Cspan class=\"hljs-string\">`- \u003Cspan class=\"hljs-subst\">${content}\u003C/span>`\u003C/span>;\n                fixedLines.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(fixedLine);\n                \n                \u003Cspan class=\"hljs-comment\">// Update stack\u003C/span>\n                listStack = listStack.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, level);\n                listStack.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({ \u003Cspan class=\"hljs-attr\">indent\u003C/span>: correctedIndent });\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Fix continuation lines\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (listStack.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> currentIndent = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getLeadingSpaces\u003C/span>(line);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> expectedIndent = listStack[listStack.\u003Cspan class=\"hljs-property\">length\u003C/span> - \u003Cspan class=\"hljs-number\">1\u003C/span>].\u003Cspan class=\"hljs-property\">indent\u003C/span> + \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">rules\u003C/span>.\u003Cspan class=\"hljs-property\">listIndentation\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (currentIndent !== expectedIndent &amp;&amp; line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>() !== \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> trimmedContent = line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>();\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> fixedLine = \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(expectedIndent) + trimmedContent;\n                    fixedLines.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(fixedLine);\n                    \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n                }\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// For other lines, check if we need to reset list stack\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)[-*+&gt;1-9]\\s/\u003C/span>) &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getLeadingSpaces\u003C/span>(line) === \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n                listStack = [];\n            }\n            \n            fixedLines.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(line);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> fixedLines.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>);\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Usage example\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> validator = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownIndentationValidator\u003C/span>();\n\n\u003Cspan class=\"hljs-comment\">// Validate document\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> validationResult = validator.\u003Cspan class=\"hljs-title function_\">validateDocument\u003C/span>(markdownContent, \u003Cspan class=\"hljs-string\">&#x27;github&#x27;\u003C/span>);\n\u003Cspan class=\"hljs-keyword\">if\u003C/span> (!validationResult.\u003Cspan class=\"hljs-property\">isValid\u003C/span>) {\n    \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Indentation issues found:&#x27;\u003C/span>);\n    validationResult.\u003Cspan class=\"hljs-property\">issues\u003C/span>.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">issue\u003C/span> =&gt;\u003C/span> {\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Line \u003Cspan class=\"hljs-subst\">${issue.line}\u003C/span>: \u003Cspan class=\"hljs-subst\">${issue.message}\u003C/span>`\u003C/span>);\n    });\n}\n\n\u003Cspan class=\"hljs-comment\">// Auto-fix indentation\u003C/span>\n\u003Cspan class=\"hljs-keyword\">const\u003C/span> fixedContent = validator.\u003Cspan class=\"hljs-title function_\">fixIndentation\u003C/span>(markdownContent);\n\u003C/code>\u003C/pre>\u003Ch2 id=\"integration-with-content-management-systems\">Integration with Content Management Systems\u003C/h2>\n\u003Cp>Indentation techniques work seamlessly with modern content workflows. When combined with \u003Ca href=\"/blog/markdown-version-control-git-integration-complete-guide\">version control and Git integration systems\u003C/a>, proper indentation ensures that content merges cleanly and diff views remain readable, preventing conflicts and maintaining document integrity across collaborative editing environments.\u003C/p>\n\u003Cp>For comprehensive documentation systems, indentation complements \u003Ca href=\"/blog/markdown-automation-workflows-complete-guide\">automated workflow and CI/CD integration\u003C/a> by enabling validation pipelines that check document structure automatically, ensuring consistent formatting standards across large content repositories and preventing publication of incorrectly formatted content.\u003C/p>\n\u003Cp>When building sophisticated content architectures, proper indentation supports \u003Ca href=\"/blog/markdown-progressive-web-app-documentation-complete-guide\">progressive web app documentation systems\u003C/a> by maintaining structured content that caches efficiently, renders consistently across devices, and supports accessibility features through proper semantic hierarchy.\u003C/p>\n\u003Ch2 id=\"troubleshooting-common-indentation-issues\">Troubleshooting Common Indentation Issues\u003C/h2>\n\u003Ch3 id=\"mixed-tabs-and-spaces\">Mixed Tabs and Spaces\u003C/h3>\n\u003Cp>\u003Cstrong>Problem\u003C/strong>: Inconsistent indentation due to mixed tab and space characters\u003C/p>\n\u003Cp>\u003Cstrong>Solutions\u003C/strong>:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// indentation-normalizer.js - Fix mixed tab/space issues\u003C/span>\n\u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">normalizeIndentation\u003C/span>(\u003Cspan class=\"hljs-params\">content, options = {}\u003C/span>) {\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> { \n        convertTabsToSpaces = \u003Cspan class=\"hljs-literal\">true\u003C/span>, \n        spacesPerTab = \u003Cspan class=\"hljs-number\">4\u003C/span>,\n        preserveCodeBlocks = \u003Cspan class=\"hljs-literal\">true\u003C/span> \n    } = options;\n    \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\">const\u003C/span> normalized = [];\n    \u003Cspan class=\"hljs-keyword\">let\u003C/span> inCodeBlock = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n    \n    \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> line \u003Cspan class=\"hljs-keyword\">of\u003C/span> lines) {\n        \u003Cspan class=\"hljs-comment\">// Track code block state\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>)) {\n            inCodeBlock = !inCodeBlock;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Skip normalization inside code blocks if preserving\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (preserveCodeBlocks &amp;&amp; inCodeBlock &amp;&amp; !line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;```&#x27;\u003C/span>)) {\n            normalized.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(line);\n            \u003Cspan class=\"hljs-keyword\">continue\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> normalizedLine = line;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (convertTabsToSpaces) {\n            \u003Cspan class=\"hljs-comment\">// Convert tabs to spaces\u003C/span>\n            normalizedLine = normalizedLine.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\t/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(spacesPerTab));\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            \u003Cspan class=\"hljs-comment\">// Convert leading spaces to tabs (less common)\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> leadingSpaces = normalizedLine.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)/\u003C/span>)[\u003Cspan class=\"hljs-number\">1\u003C/span>];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> tabCount = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">floor\u003C/span>(leadingSpaces.\u003Cspan class=\"hljs-property\">length\u003C/span> / spacesPerTab);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> remainingSpaces = leadingSpaces.\u003Cspan class=\"hljs-property\">length\u003C/span> % spacesPerTab;\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> newLeading = \u003Cspan class=\"hljs-string\">&#x27;\\t&#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(tabCount) + \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(remainingSpaces);\n            normalizedLine = newLeading + normalizedLine.\u003Cspan class=\"hljs-title function_\">trimStart\u003C/span>();\n        }\n        \n        normalized.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(normalizedLine);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">return\u003C/span> normalized.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>);\n}\n\n\u003Cspan class=\"hljs-comment\">// Detect mixed indentation issues\u003C/span>\n\u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">detectIndentationIssues\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\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\">const\u003C/span> issues = [];\n    \n    \u003Cspan class=\"hljs-keyword\">let\u003C/span> hasTabIndents = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n    \u003Cspan class=\"hljs-keyword\">let\u003C/span> hasSpaceIndents = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n    \n    lines.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">line, index\u003C/span>) =&gt;\u003C/span> {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> leadingWhitespace = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^(\\s*)/\u003C/span>)[\u003Cspan class=\"hljs-number\">1\u003C/span>];\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (leadingWhitespace.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\t&#x27;\u003C/span>)) {\n            hasTabIndents = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n        }\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (leadingWhitespace.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>)) {\n            hasSpaceIndents = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Check for mixed whitespace in same line\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (leadingWhitespace.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\t&#x27;\u003C/span>) &amp;&amp; leadingWhitespace.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>)) {\n            issues.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                \u003Cspan class=\"hljs-attr\">line\u003C/span>: index + \u003Cspan class=\"hljs-number\">1\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;mixed-line-indent&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">message\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Line contains both tabs and spaces for indentation&#x27;\u003C/span>\n            });\n        }\n    });\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (hasTabIndents &amp;&amp; hasSpaceIndents) {\n        issues.\u003Cspan class=\"hljs-title function_\">unshift\u003C/span>({\n            \u003Cspan class=\"hljs-attr\">line\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;mixed-document-indent&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">message\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Document contains mixed tab and space indentation&#x27;\u003C/span>\n        });\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">return\u003C/span> issues;\n}\n\u003C/code>\u003C/pre>\u003Ch3 id=\"platform-specific-rendering-issues\">Platform-Specific Rendering Issues\u003C/h3>\n\u003Cp>\u003Cstrong>Problem\u003C/strong>: Content displays differently across Markdown processors\u003C/p>\n\u003Cp>\u003Cstrong>Solutions\u003C/strong>:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Cross-Platform Indentation Compatibility Guide\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Conservative Indentation Approach\u003C/span>\n\nUse the most restrictive common denominator:\n\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**List Indentation**\u003C/span>: Always use 2 spaces for unordered lists\n\u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-strong\">**Code Blocks**\u003C/span>: Prefer fenced code blocks (\u003Cspan class=\"hljs-code\">```) over indented blocks\n- **Ordered Lists**: Use 3 spaces for continuation (accounting for &quot;1. &quot;)\n- **Blockquotes**: Start at column 0, use &gt; for each level\n\n## Example of Platform-Safe Indentation:\n\n1. First item with safe indentation\n\n   This paragraph uses exactly 3 spaces to align with the\n   list item content, which works across all major platforms.\n\n   ```\u003C/span>javascript\n   // Code blocks using fences rather than 4-space indentation\n   // This ensures consistent rendering\n   function example() {\n\u003Cspan class=\"hljs-code\">       return &quot;This works everywhere&quot;;\n   }\u003C/span>\n\u003C/code>\u003C/pre>\u003Col start=\"2\">\n\u003Cli>\u003Cp>Second item with nested content\u003C/p>\n\u003Cul>\n\u003Cli>Nested unordered list (2 spaces from margin)\u003Cul>\n\u003Cli>Deep nesting (4 spaces from margin)\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003Cli>Back to second level\u003C/li>\n\u003C/ul>\n\u003Cblockquote>\n\u003Cp>Blockquote in list item\u003C/p>\n\u003Cblockquote>\n\u003Cp>Nested blockquote\u003C/p>\n\u003C/blockquote>\n\u003C/blockquote>\n\u003C/li>\n\u003C/ol>\n\u003Cpre>\u003Ccode>\n### Accessibility and Screen Reader Considerations\n\n**Problem**: Improper nesting confuses assistive technologies\n\n**Solutions**:\n\n```markdown\n# Accessible Markdown Structure Guidelines\n\n## Proper Heading Hierarchy\n\n# Document Title (H1)\n## Major Section (H2)\n### Subsection (H3)\n#### Detail Level (H4)\n\n*Never skip heading levels - screen readers rely on logical progression*\n\n## Semantic List Structure\n\nUse proper nesting to convey information hierarchy:\n\n1. **Installation Process** (Main procedure)\n   \n   Follow these steps to install the software:\n   \n   1. **Download the installer** (Sub-procedure)\n      - Visit the official website\n      - Select your operating system\n      - Download the appropriate version\n   \n   2. **Run the installation** (Sub-procedure)\n      - Double-click the installer\n      - Follow the setup wizard\n      - Accept the license agreement\n   \n   3. **Verify the installation** (Sub-procedure)\n      - Open the application\n      - Check the version number\n      - Test basic functionality\n\n## Descriptive Link Context\n\nProvide clear context for nested links:\n\n- **Documentation Resources**\n  - [Installation Guide](installation.md) - Complete setup instructions\n  - [User Manual](user-manual.md) - Feature documentation and tutorials\n  - [Troubleshooting](troubleshooting.md) - Common issues and solutions\n\n*Link text clearly describes the destination and purpose*\n\u003C/code>\u003C/pre>\u003Ch2 id=\"best-practices-for-maintainable-indentation\">Best Practices for Maintainable Indentation\u003C/h2>\n\u003Ch3 id=\"automation-and-tooling\">Automation and Tooling\u003C/h3>\n\u003Cp>\u003Cstrong>Set up automated indentation checking:\u003C/strong>\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-yaml\">\u003Cspan class=\"hljs-comment\"># .github/workflows/markdown-quality.yml\u003C/span>\n\u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Markdown\u003C/span> \u003Cspan class=\"hljs-string\">Quality\u003C/span> \u003Cspan class=\"hljs-string\">Check\u003C/span>\n\n\u003Cspan class=\"hljs-attr\">on:\u003C/span> [\u003Cspan class=\"hljs-string\">push\u003C/span>, \u003Cspan class=\"hljs-string\">pull_request\u003C/span>]\n\n\u003Cspan class=\"hljs-attr\">jobs:\u003C/span>\n  \u003Cspan class=\"hljs-attr\">check-formatting:\u003C/span>\n    \u003Cspan class=\"hljs-attr\">runs-on:\u003C/span> \u003Cspan class=\"hljs-string\">ubuntu-latest\u003C/span>\n    \u003Cspan class=\"hljs-attr\">steps:\u003C/span>\n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/checkout@v3\u003C/span>\n    \n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Setup\u003C/span> \u003Cspan class=\"hljs-string\">Node.js\u003C/span>\n      \u003Cspan class=\"hljs-attr\">uses:\u003C/span> \u003Cspan class=\"hljs-string\">actions/setup-node@v3\u003C/span>\n      \u003Cspan class=\"hljs-attr\">with:\u003C/span>\n        \u003Cspan class=\"hljs-attr\">node-version:\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;18&#x27;\u003C/span>\n    \n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Install\u003C/span> \u003Cspan class=\"hljs-string\">tools\u003C/span>\n      \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n        npm install -g markdownlint-cli\n        npm install -g prettier\n\u003C/span>    \n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Check\u003C/span> \u003Cspan class=\"hljs-string\">indentation\u003C/span> \u003Cspan class=\"hljs-string\">consistency\u003C/span>\n      \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">|\n        # Check for mixed tabs and spaces\n        if grep -P &#x27;\\t&#x27; **/*.md; then\n          echo &quot;Error: Tab characters found in Markdown files&quot;\n          exit 1\n        fi\n\u003C/span>    \n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Validate\u003C/span> \u003Cspan class=\"hljs-string\">Markdown\u003C/span> \u003Cspan class=\"hljs-string\">structure\u003C/span>\n      \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">markdownlint\u003C/span> \u003Cspan class=\"hljs-string\">**/*.md\u003C/span>\n    \n    \u003Cspan class=\"hljs-bullet\">-\u003C/span> \u003Cspan class=\"hljs-attr\">name:\u003C/span> \u003Cspan class=\"hljs-string\">Check\u003C/span> \u003Cspan class=\"hljs-string\">formatting\u003C/span>\n      \u003Cspan class=\"hljs-attr\">run:\u003C/span> \u003Cspan class=\"hljs-string\">prettier\u003C/span> \u003Cspan class=\"hljs-string\">--check\u003C/span> \u003Cspan class=\"hljs-string\">**/*.md\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"editor-configuration\">Editor Configuration\u003C/h3>\n\u003Cp>\u003Cstrong>Create consistent editing environment:\u003C/strong>\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-ini\">\u003Cspan class=\"hljs-comment\"># .editorconfig\u003C/span>\n\u003Cspan class=\"hljs-attr\">root\u003C/span> = \u003Cspan class=\"hljs-literal\">true\u003C/span>\n\n\u003Cspan class=\"hljs-section\">[*.md]\u003C/span>\n\u003Cspan class=\"hljs-attr\">charset\u003C/span> = utf-\u003Cspan class=\"hljs-number\">8\u003C/span>\n\u003Cspan class=\"hljs-attr\">end_of_line\u003C/span> = lf\n\u003Cspan class=\"hljs-attr\">insert_final_newline\u003C/span> = \u003Cspan class=\"hljs-literal\">true\u003C/span>\n\u003Cspan class=\"hljs-attr\">trim_trailing_whitespace\u003C/span> = \u003Cspan class=\"hljs-literal\">true\u003C/span>\n\u003Cspan class=\"hljs-attr\">indent_style\u003C/span> = space\n\u003Cspan class=\"hljs-attr\">indent_size\u003C/span> = \u003Cspan class=\"hljs-number\">2\u003C/span>\n\n\u003Cspan class=\"hljs-section\">[*.{yml,yaml}]\u003C/span>\n\u003Cspan class=\"hljs-attr\">indent_style\u003C/span> = space\n\u003Cspan class=\"hljs-attr\">indent_size\u003C/span> = \u003Cspan class=\"hljs-number\">2\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"style-guidelines\">Style Guidelines\u003C/h3>\n\u003Cp>\u003Cstrong>Document team standards:\u003C/strong>\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-markdown\">\u003Cspan class=\"hljs-section\"># Markdown Style Guide - Indentation Standards\u003C/span>\n\n\u003Cspan class=\"hljs-section\">## Required Practices\u003C/span>\n\n\u003Cspan class=\"hljs-bullet\">1.\u003C/span> \u003Cspan class=\"hljs-strong\">**Use spaces, never tabs**\u003C/span> for indentation\n\u003Cspan class=\"hljs-bullet\">2.\u003C/span> \u003Cspan class=\"hljs-strong\">**Use 2 spaces**\u003C/span> per indentation level for lists\n\u003Cspan class=\"hljs-bullet\">3.\u003C/span> \u003Cspan class=\"hljs-strong\">**Use 3 spaces**\u003C/span> for ordered list continuation\n\u003Cspan class=\"hljs-bullet\">4.\u003C/span> \u003Cspan class=\"hljs-strong\">**Use 4 spaces**\u003C/span> for code block content when indenting\n\u003Cspan class=\"hljs-bullet\">5.\u003C/span> \u003Cspan class=\"hljs-strong\">**Start blockquotes**\u003C/span> at column 0\n\n\u003Cspan class=\"hljs-section\">## Formatting Commands\u003C/span>\n\nBefore committing, run:\n\u003Cspan class=\"hljs-code\">```bash\n# Fix indentation automatically\nprettier --write **/*.md\n\n# Validate structure\nmarkdownlint **/*.md\n\n# Check for tabs\ngrep -P &#x27;\\t&#x27; **/*.md &amp;&amp; echo &quot;Remove tabs!&quot; || echo &quot;No tabs found&quot;\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch2 id=\"review-checklist\">Review Checklist\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> All indentation uses spaces consistently\u003C/li>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> List nesting follows 2-space increments\u003C/li>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> Code blocks are properly indented within lists\u003C/li>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> Blockquotes start at column 0\u003C/li>\n\u003Cli>\u003Cinput disabled=\"\" type=\"checkbox\"> Ordered lists align continuation text properly\u003C/li>\n\u003C/ul>\n\u003Cp>```\u003C/p>\n\u003Ch2 id=\"conclusion\">Conclusion\u003C/h2>\n\u003Cp>Advanced Markdown indentation and nested content techniques form the foundation of well-structured, accessible, and maintainable documentation. By mastering proper spacing rules, understanding platform-specific requirements, and implementing consistent indentation patterns, content creators can build documents that communicate clearly across different contexts while maintaining professional presentation standards.\u003C/p>\n\u003Cp>The key to successful indentation lies in understanding that proper spacing serves both human readers and automated processors, ensuring that content hierarchy is preserved semantically while maintaining visual clarity. Whether you&#39;re creating technical documentation, user guides, or complex nested content structures, the techniques covered in this guide provide the foundation for creating reliable, accessible, and maintainable Markdown documents.\u003C/p>\n\u003Cp>Remember to establish clear style guidelines for your team, implement automated validation to catch indentation issues early, and test your content across target platforms to ensure consistent rendering. With careful attention to indentation and nesting patterns, your Markdown content can achieve professional quality while remaining simple to author and maintain.\u003C/p>\n",[15,19,22,25,28,31,34,37,40,43],{"id":16,"text":17,"level":18},"why-master-markdown-indentation-and-nesting","Why Master Markdown Indentation and Nesting?",2,{"id":20,"text":21,"level":18},"foundation-indentation-principles","Foundation Indentation Principles",{"id":23,"text":24,"level":18},"paragraphs-in-lists","Paragraphs in Lists",{"id":26,"text":27,"level":18},"tables-in-nested-content","Tables in Nested Content",{"id":29,"text":30,"level":18},"front-matter-with-complex-structures","Front Matter with Complex Structures",{"id":32,"text":33,"level":18},"integration-with-content-management-systems","Integration with Content Management Systems",{"id":35,"text":36,"level":18},"troubleshooting-common-indentation-issues","Troubleshooting Common Indentation Issues",{"id":38,"text":39,"level":18},"best-practices-for-maintainable-indentation","Best Practices for Maintainable Indentation",{"id":41,"text":42,"level":18},"review-checklist","Review Checklist",{"id":44,"text":45,"level":18},"conclusion","Conclusion",[],[48,56,63],{"slug":49,"title":50,"description":51,"excerpt":52,"date":53,"category":9,"author":10,"keywords":54,"readingMinutes":55},"markdown-nested-code-blocks-and-escaping-guide","Markdown Nested Code Blocks and Escaping: Complete Guide for Complex Documentation","Master advanced Markdown code block techniques including nested blocks, proper escaping, and handling complex code examples in documentation. Learn best practices for technical writing.","When creating technical documentation with Markdown, one of the most challenging aspects is properly displaying complex code examples, especially when you need to show how to write Markdown code…","2025-10-15","markdown nested code blocks, markdown code escaping, nested backticks markdown, markdown documentation, code block syntax, markdown technical writing, complex code examples",4,{"slug":57,"title":58,"description":59,"excerpt":60,"date":61,"category":9,"author":10,"keywords":62,"readingMinutes":12},"markdown-code-escaping-and-nested-blocks-complete-guide","Markdown Code Escaping and Nested Blocks: Complete Guide for Complex Code Documentation","Master advanced Markdown code escaping techniques for documenting nested code blocks, Liquid templates, and complex syntax patterns. Learn proper escaping strategies, avoid rendering conflicts, and create comprehensive technical documentation.","Advanced Markdown code escaping and nested block techniques enable sophisticated technical documentation that accurately represents complex code structures, template systems, and multi-layered…","2025-09-28","markdown code escaping, nested code blocks, liquid template escaping, markdown raw tags, code documentation, syntax escaping, nested markdown, code block troubleshooting",{"slug":64,"title":65,"description":66,"excerpt":67,"date":68,"category":9,"author":10,"keywords":69,"readingMinutes":70},"markdown-document-templates-automation-complete-guide","Markdown Document Templates and Automation: Complete Guide for Streamlined Content Creation and Workflow Optimization","Master Markdown document templates and automation techniques to streamline content creation workflows. Learn template design patterns, variable substitution, automated generation, and integration with modern development tools for efficient documentation systems.","Markdown document templates and automation systems transform repetitive content creation tasks into efficient, standardized workflows that ensure consistency, reduce errors, and dramatically…","2025-11-30","markdown templates, markdown automation, document templates markdown, markdown workflow automation, markdown templating systems, automated markdown generation, markdown content management",20,1792184945276]