Every tag in your XML is a decision when the output has to be Markdown. Nested elements, attributes, and CDATA blocks have to become headings, lists, and code fences, and one wrong mapping makes the whole file unusable. A sloppy xml to markdown conversion can eat an afternoon. Converters return visibly different results on the same input, so the tool choice is the real work. Match the output to your file type, whether you use pandoc on the command line or [Word Spinner](https://tools.word-spinner.com), whose free converter handles common document structures cleanly. ## What is the most effective way to convert XML to Markdown? **Word Spinner** is the most effective tool for converting XML to Markdown because it preserves your document structure while stripping away the raw tags. The tool reads your XML hierarchy and outputs clean Markdown headings, lists, and code blocks that match the original organization. For a more hands-on approach, **Pandoc** handles complex XML schemas well if you need command-line control, while **Vertopal** offers a quick browser-based converter for single files without any setup. The direct answer depends on whether you prioritize speed, structure accuracy, or batch processing. ## XML to Markdown options compared side by side The following options compare on ease of use, structure preservation, and control over the final output. | Tool | Best for | Strength | Limitation | | --- | --- | --- | --- | | Word Spinner | Quick, clean conversions | Preserves headings and lists automatically | Less control over edge cases | | Vertopal | One-off file uploads | Handles large files in the browser | Output needs manual cleanup | | Sitegpt | Paste-and-go conversion | No sign-up required | Basic formatting only | | File2markdown | Flat XML with straightforward tags | Drag-and-drop simplicity | Drops deeply nested structures | | pandoc | Batch and scripted work | Full control via command line | Steep learning curve | | MOSO Xmplify | macOS XML editing | Validates XML before export | Overkill for single files | | DEVONthink | Bulk document conversion | Integrates with note libraries | macOS only | Read the table as a starting point. If you want speed, pick the first three. If you need repeatable, precise output, pandoc or manual editing wins. ## How we evaluated these XML-to-Markdown options We compared each option on **three axes**: how much manual cleanup the output needs, whether it preserves **nested tags and attributes**, and how much **control** you have over the final formatting. The non-obvious factor was **mixed-content XML** where a line blends text with inline elements. Most tools drop the inline formatting or mangle the nesting. We favored methods like the batch workflow discussed in the [DEVONtechnologies forum](https://discourse.devontechnologies.com/t/how-to-bulk-convert-xml-to-markdown/81703) that prioritize structural fidelity over raw speed. ![How we evaluated these XML-to-Markdown options](https://seogrown.com/api/blog/images/0fabb570-8406-4819-923e-cd8397c7de76) ## 7 reliable XML to Markdown converters ranked 1. **Word Spinner**: The free XML to [Markdown converter](https://tools.word-spinner.com/blog/pdf-to-markdown-converter) on tools.word-spinner.com preserves nested tags, inline formatting, and attributes without manual cleanup. It handles the inline formatting trap that most converters ignore, so `` and `` inside `` blocks survive intact. No account or sign-up required; paste XML, get Markdown. 2. **[Vertopal](https://www.vertopal.com/en/convert/xml-to-markdown)**: A browser-based converter that accepts file uploads or pasted text. It strips the XML structure down to plain Markdown quickly, but drops attribute data and inline emphasis. Best for quick one-off conversions where you only need the text body and are not picky about formatting. ![Screenshot of the Vertopal homepage, captured September 2026](https://seogrown.com/api/blog/images/f9dc122b-3d32-4bad-bd16-f9eff2149529) 3. **[SiteGPT.ai](https://sitegpt.ai/tools/convert-xml-to-markdown)**: This free tool lets you paste XML directly and returns Markdown in a few seconds. It handles `` and `` tags cleanly, but nested attributes inside elements like `` or `` are lost. Good for documentation snippets that do not need deep metadata. ![Screenshot of the SiteGPT.ai product page, captured September 2026](https://seogrown.com/api/blog/images/0c58e139-5f86-4143-b0a9-53c6a1b1fe62) 4. **[file2markdown.ai](https://www.file2markdown.ai/blog/xml-to-markdown)**: A drag-and-drop converter that turns XML files into readable Markdown. It works well for flat XML with straightforward tags, but complex schemas with multiple nesting levels can produce uneven results. The output is cleanest when you pre-flatten the XML. ![Screenshot of the file2markdown.ai homepage, captured September 2026](https://seogrown.com/api/blog/images/835ac052-ca85-40b2-8da6-7fd5c35f47af) 5. **[pandoc](https://pandoc.org)**: The command-line powerhouse. Convert XML to Markdown with a single `pandoc -f docbook Input -t markdown -o Output` command. It gives full control over output options, including handling of attributes and custom blocks. Requires some familiarity with the terminal, but for batch processing or scripts it is the most flexible option. 6. **MOSO Xmplify**: A macOS-native XML editor that includes an export-to-Markdown function. It validates the XML first and allows you to preview the output before exporting. This is overkill if you only need a single conversion, but it is invaluable for developers who edit XML regularly and want precise control over tag-to-Markdown mapping. 7. **DEVONthink**: A document management app for macOS that supports bulk XML-to-Markdown conversion through its scripts and automation features. Ideal for researchers or writers who need to convert dozens of XML files at once and insert them directly into a Markdown-based note library. It saves time when the XML source is part of a larger knowledge base. ## The inline formatting trap in XML to Markdown Most XML-to-Markdown converters handle block-level tags like `
` and `` well, but they silently drop inline emphasis such as `` and ``. If your XML contains mixed inline formatting, the usual advice of pick any converter breaks down. You need a tool that explicitly maps inline XML elements to Markdown asterisks or underscores. **Word Spinner** preserves these inline markers, so your italic and bold survive the conversion. ## Frequently asked questions about XML to Markdown ### Can I convert XML to Markdown for free? Yes, several free options exist. **Word Spinner** converts XML to Markdown at no charge, and **Vertopal** offers a free online converter as well. Free tools typically handle straightforward XML well, but complex nested structures may need manual cleanup afterward. ### What is the difference between XML and Markdown? **XML** uses tags like `` and `<emphasis>` to mark up content, while **Markdown** uses plain symbols such as `#` for headings and `*` for emphasis. XML is designed for data exchange and validation, whereas Markdown is meant for readable, publishable text. Converting between them means translating that tag structure into lighter formatting. ### Will converting XML to Markdown lose any formatting? It can, especially with inline tags. Most converters preserve block-level structure like headings and lists, but `<em>`, `<strong>`, and `<code>` tags sometimes drop out. Check the output for italic and bold text after conversion, since that is the most common loss point. ### Do I need coding skills to convert XML to Markdown? No. Online converters handle the transformation without any programming knowledge. You paste your XML or upload the file, and the tool returns Markdown you can copy. Command-line tools like **pandoc** offer more control, but they require comfort with a terminal. ## Conclusion and your next step for XML to Markdown For most projects, **[Word Spinner](https://tools.word-spinner.com)** is your next step. It preserves nested tags and inline formatting, so you do not waste time fixing output. If you process hundreds of files daily and are comfortable with command-line tools, a scripted option from our comparison may fit better. Check the [free XML to Markdown converter](https://tools.word-spinner.com/blog/free-xml-to-markdown-converter) for a quick test. If your XML contains deeply nested lists or tables with rowspan attributes, Word Spinner preserves those without flattening the structure. For a one time conversion of a single file, the free converter works fine. But for ongoing work, the full tool saves hours of manual cleanup each week. Technical writers migrating documentation from DITA XML to Markdown find the inline formatting retention especially useful. Bloggers converting WordPress export XML get clean headings and links without extra steps. That difference turns a one time migration into a repeatable workflow. </article> <style> .article-body { color: #0f172a; line-height: 1.75; font-size: 17px; } .article-body p { color: #0f172a; margin: 1.2em 0; } .article-body h2 { font-size: 1.75rem; font-weight: 700; line-height: 1.25; letter-spacing: -0.01em; color: #000; margin: 2em 0 0.8em; } .article-body h3 { font-size: 1.25rem; font-weight: 600; line-height: 1.3; color: #000; margin: 1.8em 0 0.6em; } .article-body h4 { font-size: 1.05rem; font-weight: 600; color: #000; margin: 1.5em 0 0.5em; } .article-body a { color: #0BA3FD; text-decoration: none; border-bottom: 1px solid #0BA3FD40; transition: border-color 0.2s; } .article-body a:hover { border-bottom-color: #0BA3FD; } .article-body strong { color: #000; font-weight: 700; } .article-body em { font-style: italic; color: #0f172a; } .article-body ul, .article-body ol { margin: 1.2em 0; padding-left: 1.6em; color: #0f172a; } .article-body ul { list-style: disc; } .article-body ol { list-style: decimal; } .article-body li { margin: 0.4em 0; padding-left: 0.3em; color: #0f172a; } .article-body blockquote { border-left: 3px solid #0BA3FD; padding: 0.2em 0 0.2em 1.2em; color: #0f172a; margin: 1.4em 0; font-style: italic; } .article-body .quick-answer, .article-body .tldr-box, .article-body .tldr, .article-body div[style*="border:2px solid #07A2FC"][style*="padding:16px 20px"] { border-radius: 12px; } .article-body code { background: #e6f4ff; color: #0369a1; padding: 0.15em 0.4em; border-radius: 4px; font-size: 0.92em; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; } .article-body pre { background: #0f172a; color: #e2e8f0; padding: 1.1em 1.3em; border-radius: 8px; overflow-x: auto; margin: 1.4em 0; } .article-body pre code { background: transparent; color: inherit; padding: 0; } .article-body img { border-radius: 8px; border: 1px solid #e2e8f0; margin: 1.5em 0; max-width: 100%; height: auto; } .article-body hr { border: 0; border-top: 1px solid #e2e8f0; margin: 2.5em 0; } .article-body table { border-collapse: collapse; width: 100%; margin: 1.5em 0; font-size: 0.95em; color: #0f172a; } .article-body th, .article-body td { border: 1px solid #e2e8f0; padding: 0.6em 0.9em; text-align: left; color: #0f172a; } .article-body th { font-weight: 600; color: #000; } .dark .article-body, .dark .article-body p, .dark .article-body li, .dark .article-body ul, .dark .article-body ol, .dark .article-body blockquote, .dark .article-body em, .dark .article-body table, .dark .article-body td { color: #f1f5f9; } .dark .article-body h2, .dark .article-body h3, .dark .article-body h4, .dark .article-body strong, .dark .article-body th { color: #ffffff; } .dark .article-body code { background: #1e293b; color: #7dd3fc; } .dark .article-body th { background: #1e293b; } .dark .article-body th, .dark .article-body td { border-color: #334155; } </style> <div class="mt-8 pt-8 border-t border-slate-200 flex items-center justify-between"> <span class="text-sm font-medium text-slate-700">Share this post</span> <div class="flex items-center gap-3"> <a href="#" class="share-item w-10 h-10 flex items-center justify-center rounded-full bg-surface-raised hover:bg-border text-text-muted dark:bg-surface-raised-dark dark:hover:bg-surface-raised-dark dark:text-text-muted transition-colors" aria-label="Facebook"> <i class="ph-bold ph-facebook-logo text-lg"></i> </a> <a href="#" class="share-item w-10 h-10 flex items-center justify-center rounded-full bg-surface-raised hover:bg-border text-text-muted dark:bg-surface-raised-dark dark:hover:bg-surface-raised-dark dark:text-text-muted transition-colors" aria-label="WhatsApp"> <i class="ph-bold ph-whatsapp-logo text-lg"></i> </a> <a href="#" class="share-item w-10 h-10 flex items-center justify-center rounded-full bg-surface-raised hover:bg-border text-text-muted dark:bg-surface-raised-dark dark:hover:bg-surface-raised-dark dark:text-text-muted transition-colors" aria-label="Twitter"> <i class="ph-bold ph-x-logo text-lg"></i> </a> <a href="#" class="share-item w-10 h-10 flex items-center justify-center rounded-full bg-surface-raised hover:bg-border text-text-muted dark:bg-surface-raised-dark dark:hover:bg-surface-raised-dark dark:text-text-muted transition-colors" aria-label="Copy Link"> <i class="ph-bold ph-link text-lg"></i> </a> </div> </div> </div> <!-- CTA BANNER --> <section class="mt-20 md:mt-24 mb-8 max-w-3xl mx-auto"> <div class="relative overflow-hidden rounded-2xl bg-gradient-to-br from-primary to-[#0879C4] text-white p-8 md:p-12 text-center shadow-[0_24px_80px_-24px_rgba(11,163,253,0.5)]"> <div aria-hidden="true" class="absolute -right-20 -top-20 w-[400px] h-[400px] rounded-full bg-white/10 blur-3xl"></div> <div aria-hidden="true" class="absolute left-10 bottom-0 w-[300px] h-[300px] rounded-full bg-white/5 blur-3xl"></div> <div class="relative max-w-2xl mx-auto"> <h3 class="text-3xl md:text-4xl font-bold tracking-tight">Humanize & Rewrite Like a Real Person</h3> <p class="mt-3 text-white/85 text-lg">The best all-in-one platform for humanizing, rewriting, and generating AI content that sounds human.</p> <div class="mt-7 flex flex-col sm:flex-row gap-3 justify-center"> <a href="https://app.word-spinner.com/register" class="inline-flex items-center justify-center gap-2 px-6 py-3 rounded-md bg-white text-primary hover:bg-slate-50 font-semibold shadow-sm transition"> Start free trial <i class="ph-bold ph-arrow-right"></i> </a> <a href="https://word-spinner.com" class="inline-flex items-center justify-center gap-2 px-6 py-3 rounded-md border border-white/30 hover:border-white/60 text-white font-medium transition"> Learn more </a> </div> </div> </div> </section> </div> </main> <footer class="w-full border-t border-slate-200 bg-white pt-16 md:pt-20 pb-10"> <div class="max-w-screen-xl mx-auto px-6"> <!-- Top grid: 5 columns on desktop (brand + converters/aichat + aigenerators + other + legal), 2 on tablet, 1 on mobile --> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-10 lg:gap-12 mb-12"> <!-- Column 1: Brand --> <div> <a href="/" class="inline-block mb-4"> <img src="/logo-dark.png" alt="Word Spinner" class="h-6 w-auto"> </a> <h3 class="text-base font-semibold text-slate-900 mb-2 leading-snug"> Humanize & Rewrite Like a Real Person </h3> <p class="text-sm text-slate-600 leading-relaxed mb-5"> Keep that human touch, make your writing clearer, smoother, and easier to read. </p> <a href="mailto:support@word-spinner.com" class="inline-flex items-center gap-2 text-sm text-slate-700 hover:text-primary transition-colors"> <i class="ph-bold ph-envelope text-primary"></i> support@word-spinner.com </a> </div> <!-- Column 2: Converters + AI Chat (stacked with breathing room) --> <div class="space-y-12"> <div> <h4 class="text-xs font-bold uppercase tracking-wider text-primary mb-4">Convert to Markdown</h4> <ul class="space-y-2.5 text-sm"> <li><a href="/tool/csv-to-markdown-table-converter" class="text-slate-600 hover:text-primary transition-colors">CSV to Markdown Table Converter</a></li> <li><a href="/tool/docx-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">DOCX to Markdown Converter</a></li> <li><a href="/tool/google-docs-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">Google Docs to Markdown Converter</a></li> <li><a href="/tool/html-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">HTML to Markdown Converter</a></li> <li><a href="/tool/json-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">JSON to Markdown Converter</a></li> <li><a href="/tool/notion-page-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">Notion Page to Markdown Converter</a></li> <li><a href="/tool/paste-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">Paste to Markdown Converter</a></li> <li><a href="/tool/pdf-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">PDF to Markdown Converter</a></li> <li><a href="/tool/rtf-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">RTF to Markdown Converter</a></li> <li><a href="/tool/webpage-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">Webpage to Markdown Converter</a></li> <li><a href="/tool/xml-to-markdown-converter" class="text-slate-600 hover:text-primary transition-colors">XML to Markdown Converter</a></li> </ul> </div> <div> <h4 class="text-xs font-bold uppercase tracking-wider text-primary mb-4">AI Chat Tools</h4> <ul class="space-y-2.5 text-sm"> <li><a href="/tool/ai-chat-with-your-document" class="text-slate-600 hover:text-primary transition-colors">AI Chat with Your Document</a></li> <li><a href="/tool/ai-chat-with-your-pdf-document" class="text-slate-600 hover:text-primary transition-colors">AI Chat with Your PDF Document</a></li> <li><a href="/tool/ai-chat-with-your-text-data" class="text-slate-600 hover:text-primary transition-colors">AI Chat with Your Text Data</a></li> <li><a href="/tool/ai-chat-with-your-website-data" class="text-slate-600 hover:text-primary transition-colors">AI Chat with Your Website Data</a></li> <li><a href="/tool/ai-chat-with-your-word-document" class="text-slate-600 hover:text-primary transition-colors">AI Chat with Your Word Document</a></li> </ul> </div> </div> <!-- Column 3: AI Generators --> <div> <h4 class="text-xs font-bold uppercase tracking-wider text-primary mb-4">AI Generators</h4> <ul class="space-y-2.5 text-sm"> <li><a href="/tool/ai-answer-generator" class="text-slate-600 hover:text-primary transition-colors">AI Answer Generator</a></li> <li><a href="/tool/ai-blog-title-generator" class="text-slate-600 hover:text-primary transition-colors">AI Blog Title Generator</a></li> <li><a href="/tool/ai-chatbot-conversation-analyzer" class="text-slate-600 hover:text-primary transition-colors">AI Chatbot Conversation Analyzer</a></li> <li><a href="/tool/ai-chatbot-name-generator" class="text-slate-600 hover:text-primary transition-colors">AI Chatbot Name Generator</a></li> <li><a href="/tool/ai-email-response-generator" class="text-slate-600 hover:text-primary transition-colors">AI Email Response Generator</a></li> <li><a href="/tool/ai-faq-generator" class="text-slate-600 hover:text-primary transition-colors">AI FAQ Generator</a></li> <li><a href="/tool/ai-letter-generator" class="text-slate-600 hover:text-primary transition-colors">AI Letter Generator</a></li> <li><a href="/tool/ai-prompt-generator-with-proven-frameworks" class="text-slate-600 hover:text-primary transition-colors">AI Prompt Generator with Proven Frameworks</a></li> <li><a href="/tool/ai-prompt-optimizer" class="text-slate-600 hover:text-primary transition-colors">AI Prompt Optimizer</a></li> <li><a href="/tool/ai-reply-generator-for-any-message" class="text-slate-600 hover:text-primary transition-colors">AI Reply Generator for Any Message</a></li> <li><a href="/tool/ai-saas-brand-name-generator" class="text-slate-600 hover:text-primary transition-colors">AI SaaS Brand Name Generator</a></li> <li><a href="/tool/business-idea-generator-with-execution-plans" class="text-slate-600 hover:text-primary transition-colors">Business Idea Generator with Execution Plans</a></li> <li><a href="/tool/customer-service-script-generator" class="text-slate-600 hover:text-primary transition-colors">Customer Service Script Generator</a></li> <li><a href="/tool/docx-to-faq-generator" class="text-slate-600 hover:text-primary transition-colors">DOCX to FAQ Generator</a></li> <li><a href="/tool/google-docs-to-faq-generator" class="text-slate-600 hover:text-primary transition-colors">Google Docs to FAQ Generator</a></li> <li><a href="/tool/html-to-faq-generator" class="text-slate-600 hover:text-primary transition-colors">HTML to FAQ Generator</a></li> <li><a href="/tool/pdf-to-faq-generator" class="text-slate-600 hover:text-primary transition-colors">PDF to FAQ Generator</a></li> <li><a href="/tool/webpage-to-faq-generator" class="text-slate-600 hover:text-primary transition-colors">Webpage to FAQ Generator</a></li> <li><a href="/tool/website-faq-generator" class="text-slate-600 hover:text-primary transition-colors">Website FAQ Generator</a></li> </ul> </div> <!-- Column 4: Other Tools --> <div> <h4 class="text-xs font-bold uppercase tracking-wider text-primary mb-4">Other Tools</h4> <ul class="space-y-2.5 text-sm"> <li><a href="/#tools" class="text-slate-600 hover:text-primary transition-colors font-medium">All Tools</a></li> <li><a href="/tool/chatbot-roi-calculator" class="text-slate-600 hover:text-primary transition-colors">Chatbot ROI Calculator</a></li> <li><a href="/tool/color-palette-generator" class="text-slate-600 hover:text-primary transition-colors">Color Palette Generator</a></li> <li><a href="/tool/email-signature-generator" class="text-slate-600 hover:text-primary transition-colors">Email Signature Generator</a></li> <li><a href="/tool/internal-link-checker" class="text-slate-600 hover:text-primary transition-colors">Internal Link Checker</a></li> <li><a href="/tool/keyword-clustering-tool" class="text-slate-600 hover:text-primary transition-colors">Keyword Clustering Tool</a></li> <li><a href="/tool/keyword-difficulty-checker-bulk-kd-scoring-tool" class="text-slate-600 hover:text-primary transition-colors">Keyword Difficulty Checker: Bulk KD Scoring Tool</a></li> <li><a href="/tool/sitemap-analytics-seo-insights" class="text-slate-600 hover:text-primary transition-colors">Sitemap Analytics & SEO Insights</a></li> <li><a href="/tool/sitemap-finder-checker" class="text-slate-600 hover:text-primary transition-colors">Sitemap Finder & Checker</a></li> <li><a href="/tool/sitemap-frequency-analyzer" class="text-slate-600 hover:text-primary transition-colors">Sitemap Frequency Analyzer</a></li> <li><a href="/tool/sitemap-index-generator" class="text-slate-600 hover:text-primary transition-colors">Sitemap Index Generator</a></li> <li><a href="/tool/sitemap-split-merger-tool" class="text-slate-600 hover:text-primary transition-colors">Sitemap Split & Merger Tool</a></li> <li><a href="/tool/sitemap-to-robotstxt-generator" class="text-slate-600 hover:text-primary transition-colors">Sitemap to Robots.txt Generator</a></li> <li><a href="/tool/sitemap-url-extractor" class="text-slate-600 hover:text-primary transition-colors">Sitemap URL Extractor</a></li> <li><a href="/tool/sitemap-urls-comparison-tool" class="text-slate-600 hover:text-primary transition-colors">Sitemap URLs Comparison Tool</a></li> <li><a href="/tool/website-url-extractor-crawler" class="text-slate-600 hover:text-primary transition-colors">Website URL Extractor & Crawler</a></li> <li><a href="/tool/xml-sitemap-generator" class="text-slate-600 hover:text-primary transition-colors">XML Sitemap Generator</a></li> <li><a href="/tool/xml-sitemap-validator-seo-analyzer" class="text-slate-600 hover:text-primary transition-colors">XML Sitemap Validator & SEO Analyzer</a></li> </ul> </div> <!-- Column 5: Legal --> <div> <h4 class="text-xs font-bold uppercase tracking-wider text-primary mb-4">Legal</h4> <ul class="space-y-2.5 text-sm"> <li><a href="https://word-spinner.com/terms-of-use/" target="_blank" rel="noopener" class="text-slate-600 hover:text-primary transition-colors">Terms of Use</a></li> <li><a href="https://word-spinner.com/privacy-policy/" target="_blank" rel="noopener" class="text-slate-600 hover:text-primary transition-colors">Privacy Policy</a></li> <li><a href="mailto:support@word-spinner.com" class="text-slate-600 hover:text-primary transition-colors">Contact</a></li> </ul> </div> </div> <!-- Bottom bar --> <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 pt-8 border-t border-slate-200"> <p class="text-xs text-slate-500"> © 2026 <a href="https://word-spinner.com" target="_blank" class="hover:text-primary">Word Spinner</a>. All rights reserved. </p> <div class="flex items-center gap-3"> </div> </div> </div> </footer> <template id="consent-scripts"> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-10EKVFMLWY"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-10EKVFMLWY'); </script> <script defer data-domain="tools.word-spinner.com" src="https://analytics.versanomedia.com/js/script.js"></script> </template> <script> window.activateConsentScripts = function () { if (window.__consentScriptsActivated) return; const template = document.getElementById('consent-scripts'); if (!template) return; window.__consentScriptsActivated = true; const fragment = template.content.cloneNode(true); fragment.querySelectorAll('script').forEach((source) => { const script = document.createElement('script'); for (const attribute of source.attributes) { script.setAttribute(attribute.name, attribute.value); } script.textContent = source.textContent; source.replaceWith(script); }); document.head.appendChild(fragment); }; window.acceptAnalyticsConsent = function () { localStorage.setItem('cookieConsent', 'accepted'); window.activateConsentScripts(); }; window.declineAnalyticsConsent = function () { localStorage.setItem('cookieConsent', 'declined'); }; const storedConsent = localStorage.getItem('cookieConsent'); if (storedConsent === 'accepted' || storedConsent === 'true') { window.activateConsentScripts(); } </script> <div x-cloak x-data="{ showCookieBanner: false }" x-init="setTimeout(() => showCookieBanner = !['accepted', 'declined', 'true'].includes(localStorage.getItem('cookieConsent')), 500)" x-show="showCookieBanner" x-transition:enter="transition ease-out duration-500 transform" x-transition:enter-start="translate-y-full opacity-0" x-transition:enter-end="translate-y-0 opacity-100" x-transition:leave="transition ease-in duration-300 transform" x-transition:leave-start="translate-y-0 opacity-100" x-transition:leave-end="translate-y-full opacity-0" class="container max-w-screen-xl mx-auto px-4 pb-6 pointer-events-none"> <div class="pointer-events-auto bg-surface dark:bg-surface-dark border border-border dark:border-border-dark p-5 rounded-md shadow-2xl flex flex-col gap-4"> <div class="text-sm text-text-muted dark:text-gray-300 leading-relaxed"> We use essential cookies for site security and optional analytics cookies to understand how the tools are used. Analytics loads only after you accept. <a href="https://word-spinner.com/privacy-policy/" target="_blank" rel="noopener" class="text-primary dark:text-primary-dark hover:underline font-medium block mt-1.5">Read our Privacy Policy</a> </div> <div class="flex flex-col sm:flex-row gap-2"> <button @click="declineAnalyticsConsent(); showCookieBanner = false" class="flex-1 px-4 py-2.5 border border-border dark:border-border-dark hover:bg-surface-raised dark:hover:bg-surface-raised-dark rounded-md text-sm font-medium transition-colors"> Decline analytics </button> <button @click="acceptAnalyticsConsent(); showCookieBanner = false" class="flex-1 px-4 py-2.5 bg-primary hover:bg-primary-light text-white rounded-md text-sm font-medium transition-colors shadow-sm"> Accept analytics </button> </div> </div> </div> <div class="fixed bottom-10 left-1/2 -translate-x-1/2 z-50 space-y-3 w-full max-w-sm" style="pointer-events:none;" > <template x-for="toast in toasts" :key="toast.id"> <div x-transition.opacity.duration.300 class="flex items-center gap-3 px-4 py-3 rounded-lg bg-surface dark:bg-surface-dark shadow-md border border-border dark:border-border-dark" style="pointer-events:auto;" > <i class="text-2xl" :class="{ 'ph-bold ph-check-circle text-success': toast.type === 'success', 'ph-bold ph-warning-circle text-danger': toast.type === 'error', 'ph-bold ph-info text-primary dark:text-primary-dark': toast.type === 'info', 'ph-bold ph-warning text-warning': toast.type === 'warning' }" ></i> <span class="flex-1 text-text-base dark:text-text-base-dark" x-text="toast.message"></span> </div> </template> </div> <script src="/public/js/app.js"></script> <script> document.addEventListener('DOMContentLoaded', function() { const shareItems = document.querySelectorAll('.share-item'); shareItems.forEach(item => { item.addEventListener('click', function(event) { event.preventDefault(); const label = this.getAttribute('aria-label'); let shareUrl = ''; const pageUrl = encodeURIComponent(window.location.href); const pageTitle = encodeURIComponent(document.title); switch (label) { case 'Facebook': shareUrl = `https://www.facebook.com/sharer/sharer.php?u=${pageUrl}`; break; case 'WhatsApp': shareUrl = `https://api.whatsapp.com/send?text=${pageTitle}%20${pageUrl}`; break; case 'Twitter': shareUrl = `https://twitter.com/intent/tweet?url=${pageUrl}&text=${pageTitle}`; break; case 'Copy Link': navigator.clipboard.writeText(window.location.href).then(() => { alert("Link copied to clipboard!"); }).catch(() => { alert("Link copied to clipboard!"); }); return; } if (shareUrl) { window.open(shareUrl, '_blank', 'width=600,height=400'); } }); }); }); </script> </body> </html>