PageSourceSearch

https://markdown.es/

html markdown.es collected 2026-09-26 12:24:38 UTC 201,120 bytes, 556 lines download raw bytes

1<!DOCTYPE html><html lang="es"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/png" href="/Markdown-logo.png"><link rel="apple-touch-icon" href="/Markdown-logo.png"><link rel="canonical" href="https://markdown.es/"><link rel="preconnect" href="https://ads.themoneytizer.com" crossorigin><link rel="dns-prefetch" href="https://ads.themoneytizer.com"><meta name="generator" content="Astro v6.0.0"><title>Qué es Markdown y cómo usarlo: guía en español - Markdown.es</title><meta name="description" content="Aprende Markdown desde cero: qué es, para qué sirve y toda su sintaxis con ejemplos. Guía en español con herramientas gratis para convertir a HTML, PDF o RTF."><!-- 1. THEMONEYTIZER InMobi Choice CMP (Gestor de Consentimiento - debe ir primero) -->
1<script type="text/javascript" async>
2(function() {
3  var host = "www.themoneytizer.com";
4  var element = document.createElement('script');
5  var firstScript = document.getElementsByTagName('script')[0];
6  var url = 'https://cmp.inmobi.com'
7    .concat('/choice/', '6Fv0cGNfc_bw8', '/', host, '/choice.js?tag_version=V3');
8  var uspTries = 0;
9  var uspTriesLimit = 3;
10  element.async = true;
11  element.type = 'text/javascript';
12  element.src = url;
13
14  firstScript.parentNode.insertBefore(element, firstScript);
15
16  function makeStub() {
17    var TCF_LOCATOR_NAME = '__tcfapiLocator';
18    var queue = [];
19    var win = window;
20    var cmpFrame;
21
22    function addFrame() {
23      var doc = win.document;
24      var otherCMP = !!(win.frames[TCF_LOCATOR_NAME]);
25
26      if (!otherCMP) {
27        if (doc.body) {
28          var iframe = doc.createElement('iframe');
29
30          iframe.style.cssText = 'display:none';
31          iframe.name = TCF_LOCATOR_NAME;
32          doc.body.appendChild(iframe);
33        } else {
34          setTimeout(addFrame, 5);
35        }
36      }
37      return !otherCMP;
38    }
39
40    function tcfAPIHandler() {
41      var gdprApplies;
42      var args = arguments;
43
44      if (!args.length) {
45        return queue;
46      } else if (args[0] === 'setGdprApplies') {
47        if (
48          args.length > 3 &&
49          args[2] === 2 &&
50          typeof args[3] === 'boolean'
51        ) {
52          gdprApplies = args[3];
53          if (typeof args[2] === 'function') {
54            args[2]('set', true);
55          }
56        }
57      } else if (args[0] === 'ping') {
58        var retr = {
59          gdprApplies: gdprApplies,
60          cmpLoaded: false,
61          cmpStatus: 'stub'
62        };
63
64        if (typeof args[2] === 'function') {
65          args[2](retr);
66        }
67      } else {
68        if(args[0] === 'init' && typeof args[3] === 'object') {
69          args[3] = Object.assign(args[3], { tag_version: 'V3' });
70        }
71        queue.push(args);
72      }
73    }
74
75    function postMessageEventHandler(event) {
76      var msgIsString = typeof event.data === 'string';
77      var json = {};
78
79      try {
80        if (msgIsString) {
81          json = JSON.parse(event.data);
82        } else {
83          json = event.data;
84        }
85      } catch (ignore) {}
86
87      var payload = json.__tcfapiCall;
88
89      if (payload) {
90        window.__tcfapi(
91          payload.command,
92          payload.version,
93          function(retValue, success) {
94            var returnMsg = {
95              __tcfapiReturn: {
96                returnValue: retValue,
97                success: success,
98                callId: payload.callId
99              }
100            };
101            if (msgIsString) {
102              returnMsg = JSON.stringify(returnMsg);
103            }
104            if (event && event.source && event.source.postMessage) {
105              event.source.postMessage(returnMsg, '*');
106            }
107          },
108          payload.parameter
109        );
110      }
111    }
112
113    while (win) {
114      try {
115        if (win.frames[TCF_LOCATOR_NAME]) {
116          cmpFrame = win;
117          break;
118        }
119      } catch (ignore) {}
120
121      if (win === window.top) {
122        break;
123      }
124      win = win.parent;
125    }
126    if (!cmpFrame) {
127      addFrame();
128      win.__tcfapi = tcfAPIHandler;
129      win.addEventListener('message', postMessageEventHandler, false);
130    }
131  };
132
133  makeStub();
134
135  var uspStubFunction = function() {
136    var arg = arguments;
137    if (typeof window.__uspapi !== uspStubFunction) {
138      setTimeout(function() {
139        if (typeof window.__uspapi !== 'undefined') {
140          window.__uspapi.apply(window.__uspapi, arg);
141        }
142      }, 500);
143    }
144  };
145
146  var checkIfUspIsReady = function() {
147    uspTries++;
148    if (window.__uspapi === uspStubFunction && uspTries < uspTriesLimit) {
149      console.warn('USP is not accessible');
150    } else {
151      clearInterval(uspInterval);
152    }
153  };
154
155  if (typeof window.__uspapi === 'undefined') {
156    window.__uspapi = uspStubFunction;
157    var uspInterval = setInterval(checkIfUspIsReady, 6000);
158  }
159})();
160</script>
160 <!-- 2. Google Consent Mode v2 (después del CMP) -->
160<script>
161  window.dataLayer = window.dataLayer || [];
162  function gtag(){dataLayer.push(arguments);}
163  gtag('consent', 'default', {
164    'ad_storage': 'denied',
165    'ad_user_data': 'denied',
166    'ad_personalization': 'denied',
167    'analytics_storage': 'denied',
168    'wait_for_update': 3000
169  });
170</script>
170 <!-- 3. GA4 -->
vendor: 63 bytes, line 170
170<script async src="https://www.googletagmanager.com/gtag/js?id=
170G-GG343T2DY8
vendor: 12 bytes, line 170
170"></script> 
170<script>
171  gtag('js', new Date());
172  gtag('config', 'G-GG343T2DY8');
173</script>
173 <!-- 4. AdSense -->
173<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
173 
173<script>
174  (adsbygoogle = window.adsbygoogle || []).push({
175    google_ad_client: "ca-pub-1602196224032955",
176    enable_page_level_ads: true
177  });
178</script>
178 <!-- 5. Publisuites --><meta name="publisuites-verify-code" content="aHR0cHM6Ly9tYXJrZG93bi5lcw=="><link rel="stylesheet" href="/_astro/Layout.Bsp3KVRM.css"></head> <body class="min-h-screen flex flex-col bg-slate-50 text-slate-900 font-sans selection:bg-blue-200 selection:text-blue-900"> <header class="w-full border-b border-slate-200/50 bg-white/80 backdrop-blur-md sticky top-0 z-50 transition-all"> <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 h-16 flex items-center justify-between"> <a href="/" class="flex items-center gap-2 group"> <img src="/Markdown-logo.png" alt="Markdown.es Logo" width="32" height="32" loading="eager" class="h-8 w-8 object-contain group-hover:scale-105 transition-transform duration-300"> <span class="font-bold text-xl tracking-tight text-slate-900">Markdown<span class="text-slate-400 font-light">.es</span></span> </a> <!-- Mobile Menu Button --> <div class="md:hidden flex items-center"> <button id="mobile-menu-button" class="text-slate-600 hover:text-slate-900 focus:outline-none p-2 bg-slate-100 rounded-lg" aria-label="Abrir menú"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" id="menu-icon-open" class="lucide lucide-menu w-6 h-6">  <path d="M4 5h16"></path> <path d="M4 12h16"></path> <path d="M4 19h16"></path>  </svg> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" id="menu-icon-close" class="lucide lucide-x w-6 h-6 hidden">  <path d="M18 6 6 18"></path> <path d="m6 6 12 12"></path>  </svg> </button> </div> <!-- Desktop nav --> <nav class="hidden md:flex items-center gap-6"> <a href="/" class="text-sm font-medium transition-colors hover:text-blue-600 text-blue-600">Inicio</a> <a href="/sintaxis-markdown" class="text-sm font-medium transition-colors hover:text-blue-600 text-slate-600">Sintaxis</a> <a href="/multimarkdown" class="text-sm font-medium transition-colors hover:text-blue-600 text-slate-600">MultiMarkdown</a> <a href="/aplicaciones-markdown" class="text-sm font-medium transition-colors hover:text-blue-600 text-slate-600">Aplicaciones</a> <!-- Herramientas: enlace + desplegable. El <a> sigue siendo un enlace real
179           a /herramientas, para no perder el rastreo ni el acceso por teclado;
180           el menu se abre al pasar el raton o al enfocar. --> <div class="relative group"> <a href="/herramientas" aria-haspopup="true" class="inline-flex items-center gap-1 text-sm font-medium transition-colors hover:text-blue-600 text-slate-600">
181Herramientas
182<svg class="w-3.5 h-3.5 transition-transform group-hover:rotate-180" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg> </a> <div class="invisible opacity-0 group-hover:visible group-hover:opacity-100 group-focus-within:visible group-focus-within:opacity-100 transition-all duration-150 absolute left-1/2 -translate-x-1/2 top-full pt-3 z-50"> <div class="w-[44rem] max-w-[calc(100vw-2rem)] p-4 bg-white border border-slate-200 rounded-[1.5rem] shadow-2xl shadow-slate-900/10"> <div class="grid grid-cols-3 gap-x-5 gap-y-1"> <div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Conversión de Documentos</p> <ul class="flex flex-col"> <li> <a href="/herramientas/markdown-a-html" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-blue-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> <span class="truncate">Markdown → HTML</span> </a> </li><li> <a href="/herramientas/html-a-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code w-4 h-4 shrink-0 text-orange-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12.5 8 15l2 2.5"></path> <path d="m14 12.5 2 2.5-2 2.5"></path>  </svg> <span class="truncate">HTML → Markdown</span> </a> </li><li> <a href="/herramientas/markdown-a-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-down w-4 h-4 shrink-0 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 18v-6"></path> <path d="m9 15 3 3 3-3"></path>  </svg> <span class="truncate">Markdown → PDF</span> </a> </li><li> <a href="/herramientas/pdf-a-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-up w-4 h-4 shrink-0 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 12v6"></path> <path d="m15 15-3-3-3 3"></path>  </svg> <span class="truncate">PDF → Markdown</span> </a> </li><li> <a href="/herramientas/imagen-a-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scan-text w-4 h-4 shrink-0 text-violet-600">  <path d="M3 7V5a2 2 0 0 1 2-2h2"></path> <path d="M17 3h2a2 2 0 0 1 2 2v2"></path> <path d="M21 17v2a2 2 0 0 1-2 2h-2"></path> <path d="M7 21H5a2 2 0 0 1-2-2v-2"></path> <path d="M7 8h8"></path> <path d="M7 12h10"></path> <path d="M7 16h6"></path>  </svg> <span class="truncate">Imagen → Markdown</span> </a> </li><li> <a href="/herramientas/markdown-a-word" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-type-corner w-4 h-4 shrink-0 text-blue-600">  <path d="M12 22h6a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v6"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M3 16v-1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V16"></path> <path d="M6 22h2"></path> <path d="M7 14v8"></path>  </svg> <span class="truncate">Markdown → Word</span> </a> </li><li> <a href="/herramientas/word-a-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-input w-4 h-4 shrink-0 text-indigo-600">  <path d="M4 11V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M2 15h10"></path> <path d="m9 18 3-3-3-3"></path>  </svg> <span class="truncate">Word → Markdown</span> </a> </li><li> <a href="/herramientas/markdown-a-texto-enriquecido" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-clipboard-type w-4 h-4 shrink-0 text-indigo-600">  <rect width="8" height="4" x="8" y="2" rx="1" ry="1"></rect> <path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path> <path d="M9 12v-1h6v1"></path> <path d="M11 17h2"></path> <path d="M12 11v6"></path>  </svg> <span class="truncate">Markdown → Texto rico</span> </a> </li><li> <a href="/herramientas/texto-enriquecido-a-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-text w-4 h-4 shrink-0 text-emerald-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 9H8"></path> <path d="M16 13H8"></path> <path d="M16 17H8"></path>  </svg> <span class="truncate">Texto rico → Markdown</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Herramientas de Tablas</p> <ul class="flex flex-col"> <li> <a href="/herramientas/generador-de-tablas" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table-2 w-4 h-4 shrink-0 text-emerald-600">  <path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"></path>  </svg> <span class="truncate">Generador de tablas</span> </a> </li><li> <a href="/herramientas/csv-a-tabla-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-grid-3x3 w-4 h-4 shrink-0 text-green-600">  <rect width="18" height="18" x="3" y="3" rx="2"></rect> <path d="M3 9h18"></path> <path d="M3 15h18"></path> <path d="M9 3v18"></path> <path d="M15 3v18"></path>  </svg> <span class="truncate">CSV → Tabla</span> </a> </li><li> <a href="/herramientas/excel-a-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-spreadsheet w-4 h-4 shrink-0 text-green-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M8 13h2"></path> <path d="M14 13h2"></path> <path d="M8 17h2"></path> <path d="M14 17h2"></path>  </svg> <span class="truncate">Excel → Tabla</span> </a> </li><li> <a href="/herramientas/tabla-markdown-a-html" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table-properties w-4 h-4 shrink-0 text-teal-600">  <path d="M15 3v18"></path> <rect width="18" height="18" x="3" y="3" rx="2"></rect> <path d="M21 9H3"></path> <path d="M21 15H3"></path>  </svg> <span class="truncate">Tabla → HTML</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Visualización y Análisis</p> <ul class="flex flex-col"> <li> <a href="/herramientas/previsualizador" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-eye w-4 h-4 shrink-0 text-purple-600">  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path> <circle cx="12" cy="12" r="3"></circle>  </svg> <span class="truncate">Previsualizador</span> </a> </li><li> <a href="/herramientas/markdown-a-mapa-mental" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-brain w-4 h-4 shrink-0 text-indigo-600">  <path d="M12 18V5"></path> <path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"></path> <path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"></path> <path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"></path> <path d="M18 18a4 4 0 0 0 2-7.464"></path> <path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"></path> <path d="M6 18a4 4 0 0 1-2-7.464"></path> <path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"></path>  </svg> <span class="truncate">Mapa mental</span> </a> </li><li> <a href="/herramientas/json-a-markdown" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-braces w-4 h-4 shrink-0 text-amber-600">  <path d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"></path> <path d="M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"></path>  </svg> <span class="truncate">JSON → Markdown</span> </a> </li> </ul> </div> </div> <a href="/herramientas" class="mt-3 flex items-center justify-center gap-2 px-4 py-2.5 bg-slate-900 text-white text-sm font-bold rounded-xl hover:bg-slate-800 transition-colors no-u
182nderline">
183Ver todas las herramientas →
184</a> </div> </div> </div> <!-- Utilidades: mismo patron que Herramientas, seccion aparte. Solo
185           aparece cuando hay al menos una utilidad publicada. --> <div class="relative group"> <a href="/utilidades" aria-haspopup="true" class="inline-flex items-center gap-1 text-sm font-medium transition-colors hover:text-emerald-600 text-slate-600">
186Utilidades
187<svg class="w-3.5 h-3.5 transition-transform group-hover:rotate-180" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg> </a> <div class="invisible opacity-0 group-hover:visible group-hover:opacity-100 group-focus-within:visible group-focus-within:opacity-100 transition-all duration-150 absolute right-0 top-full pt-3 z-50"> <div class="w-[52rem] max-w-[calc(100vw-2rem)] p-4 bg-white border border-slate-200 rounded-[1.5rem] shadow-2xl shadow-slate-900/10"> <div class="grid grid-cols-3 gap-x-5 gap-y-3"> <div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Herramientas PDF</p> <ul class="flex flex-col"> <li> <a href="/utilidades/unir-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-combine w-4 h-4 shrink-0 text-red-600">  <path d="M14 3a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1"></path> <path d="M19 3a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1"></path> <path d="m7 15 3 3"></path> <path d="m7 21 3-3H5a2 2 0 0 1-2-2v-2"></path> <rect x="14" y="14" width="7" height="7" rx="1"></rect> <rect x="3" y="3" width="7" height="7" rx="1"></rect>  </svg> <span class="truncate">Unir PDF</span> </a> </li><li> <a href="/utilidades/dividir-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scissors w-4 h-4 shrink-0 text-red-600">  <circle cx="6" cy="6" r="3"></circle> <path d="M8.12 8.12 12 12"></path> <path d="M20 4 8.12 15.88"></path> <circle cx="6" cy="18" r="3"></circle> <path d="M14.8 14.8 20 20"></path>  </svg> <span class="truncate">Dividir PDF</span> </a> </li><li> <a href="/utilidades/comprimir-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-minimize-2 w-4 h-4 shrink-0 text-orange-600">  <path d="m14 10 7-7"></path> <path d="M20 10h-6V4"></path> <path d="m3 21 7-7"></path> <path d="M4 14h6v6"></path>  </svg> <span class="truncate">Comprimir PDF</span> </a> </li><li> <a href="/utilidades/eliminar-paginas-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-x-corner w-4 h-4 shrink-0 text-orange-600">  <path d="M11 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m15 17 5 5"></path> <path d="m20 17-5 5"></path>  </svg> <span class="truncate">Eliminar páginas</span> </a> </li><li> <a href="/utilidades/extraer-paginas-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-output w-4 h-4 shrink-0 text-orange-600">  <path d="M4.226 20.925A2 2 0 0 0 6 22h12a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v3.127"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m5 11-3 3"></path> <path d="m5 17-3-3h10"></path>  </svg> <span class="truncate">Extraer páginas</span> </a> </li><li> <a href="/utilidades/ordenar-paginas-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-arrow-down-up w-4 h-4 shrink-0 text-orange-600">  <path d="m3 16 4 4 4-4"></path> <path d="M7 20V4"></path> <path d="m21 8-4-4-4 4"></path> <path d="M17 4v16"></path>  </svg> <span class="truncate">Ordenar páginas</span> </a> </li><li> <a href="/utilidades/rotar-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-rotate-cw w-4 h-4 shrink-0 text-red-600">  <path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path> <path d="M21 3v5h-5"></path>  </svg> <span class="truncate">Rotar PDF</span> </a> </li><li> <a href="/utilidades/numerar-paginas-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-hash w-4 h-4 shrink-0 text-orange-600">  <line x1="4" x2="20" y1="9" y2="9"></line> <line x1="4" x2="20" y1="15" y2="15"></line> <line x1="10" x2="8" y1="3" y2="21"></line> <line x1="16" x2="14" y1="3" y2="21"></line>  </svg> <span class="truncate">Numerar páginas</span> </a> </li><li> <a href="/utilidades/marca-de-agua-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-stamp w-4 h-4 shrink-0 text-orange-600">  <path d="M14 13V8.5C14 7 15 7 15 5a3 3 0 0 0-6 0c0 2 1 2 1 3.5V13"></path> <path d="M20 15.5a2.5 2.5 0 0 0-2.5-2.5h-11A2.5 2.5 0 0 0 4 15.5V17a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1z"></path> <path d="M5 22h14"></path>  </svg> <span class="truncate">Marca de agua</span> </a> </li><li>
187 <a href="/utilidades/jpg-a-pdf" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-image-plus w-4 h-4 shrink-0 text-red-600">  <path d="M16 5h6"></path> <path d="M19 2v6"></path> <path d="M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5"></path> <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path> <circle cx="9" cy="9" r="2"></circle>  </svg> <span class="truncate">JPG → PDF</span> </a> </li><li> <a href="/utilidades/pdf-a-jpg" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-image w-4 h-4 shrink-0 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <circle cx="10" cy="12" r="2"></circle> <path d="m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22"></path>  </svg> <span class="truncate">PDF → JPG</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Herramientas de Imagen</p> <ul class="flex flex-col"> <li> <a href="/utilidades/heic-a-jpg" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-smartphone w-4 h-4 shrink-0 text-purple-600">  <rect width="14" height="20" x="5" y="2" rx="2" ry="2"></rect> <path d="M12 18h.01"></path>  </svg> <span class="truncate">HEIC → JPG</span> </a> </li><li> <a href="/utilidades/png-a-jpg" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-images w-4 h-4 shrink-0 text-blue-600">  <path d="m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16"></path> <path d="M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2"></path> <circle cx="13" cy="7" r="1" fill="currentColor"></circle> <rect x="8" y="2" width="14" height="14" rx="2"></rect>  </svg> <span class="truncate">PNG → JPG</span> </a> </li><li> <a href="/utilidades/jpg-a-png" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-image w-4 h-4 shrink-0 text-blue-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <circle cx="10" cy="12" r="2"></circle> <path d="m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22"></path>  </svg> <span class="truncate">JPG → PNG</span> </a> </li><li> <a href="/utilidades/webp-a-jpg" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shapes w-4 h-4 shrink-0 text-teal-600">  <path d="M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z"></path> <rect x="3" y="14" width="7" height="7" rx="1"></rect> <circle cx="17.5" cy="17.5" r="3.5"></circle>  </svg> <span class="truncate">WebP → JPG</span> </a> </li><li> <a href="/utilidades/comprimir-imagen" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shrink w-4 h-4 shrink-0 text-emerald-600">  <path d="m15 15 6 6m-6-6v4.8m0-4.8h4.8"></path> <path d="M9 19.8V15m0 0H4.2M9 15l-6 6"></path> <path d="M15 4.2V9m0 0h4.8M15 9l6-6"></path> <path d="M9 4.2V9m0 0H4.2M9 9 3 3"></path>  </svg> <span class="truncate">Comprimir imagen</span> </a> </li><li> <a href="/utilidades/redimensionar-imagen" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-expand w-4 h-4 shrink-0 text-green-600">  <path d="m15 15 6 6"></path> <path d="m15 9 6-6"></path> <path d="M21 16v5h-5"></path> <path d="M21 8V3h-5"></path> <path d="M3 16v5h5"></path> <path d="m3 21 6-6"></path> <path d="M3 8V3h5"></path> <path d="M9 9 3 3"></path>  </svg> <span class="truncate">Redimensionar</span> </a> </li><li> <a href="/utilidades/svg-a-png" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shapes w-4 h-4 shrink-0 text-indigo-600">  <path d="M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z"></path> <rect x="3" y="14" width="7" height="7" rx="1"></rect> <circle cx="17.5" cy="17.5" r="3.5"></circle>  </svg> <span class="truncate">SVG → PNG</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Texto y Escritura</p> <ul class="flex flex-col"> <li> <a href="/utilidades/contador-de-palabras" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-pilcrow w-4 h-4 shrink-0 text-blue-600">  <path d="M13 4v16"></path> <path d="M17 4v16"></path> <path d="M19 4H9.5a4.5 4.5 0 0 0 0 9H13"></path>  </svg> <span class="truncate">Contador de palabras</span> </a> </li><li> <a href="/utilidades/comparar-textos" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-git-compare w-4 h-4 shrink-0 text-purple-600">  <circle cx="18" cy="18" r="3"></circle> <circle cx="6" cy="6" r="3"></circle> <path d="M13 6h3a2 2 0 0 1 2 2v7"></path> <path d="M11 18H8a2 2 0 0 1-2-2V9"></path>  </svg> <span class="truncate">Comparar textos</span> </a> </li><li> <a href="/utilidades/convertir-mayusculas-minusculas" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-type w-4 h-4 shrink-0 text-emerald-600">  <path d="M12 4v16"></path> <path d="M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2"></path> <path d="M9 20h6"></path>  </svg> <span class="truncate">Mayús. y minús.</span> </a> </li><li> <a href="/utilidades/ordenar-lineas" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-list-ordered w-4 h-4 shrink-0 text-teal-600">  <path d="M11 5h10"></path> <path d="M11 12h10"></path> <path d="M11 19h10"></path> <path d="M4 4h1v5"></path> <path d="M4 9h2"></path> <path d="M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02"></path>  </svg> <span class="truncate">Ordenar líneas</span> </a> </li><li> <a href="/utilidades/lorem-ipsum" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scroll-text w-4 h-4 shrink-0 text-amber-600">  <path d="M15 12h-5"></path> <path d="M15 8h-5"></path> <path d="M19 17V5a2 2 0 0 0-2-2H4"></path> <path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"></path>  </svg> <span class="truncate">Lorem ipsum</span> </a> </li><li> <a href="/utilidades/analizador-de-texto" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-baseline w-4 h-4 shrink-0 text-indigo-600">  <path d="M4 20h16"></path> <path d="m6 16 6-12 6 12"></path> <path d="M8 12h8"></path>  </svg> <span class="truncate">Analizador de texto</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Codificar y Decodificar</p> <ul class="flex flex-col"> <li> <a href="/utilidades/base64" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-binary w-4 h-4 shrink-0 text-blue-600">  <rect x="14" y="14" width="4" height="6" rx="2"></rect> <rect x="6" y="4" width="4" height="6" rx="2"></rect> <path d="M6 20h4"></path> <path d="M14 10h4"></path> <path d="M6 14h2v6"></path> <path d="M14 4h2v6"></path>  </svg> <span class="truncate">Base64 texto</span> </a> </li><li> <a href="/utilidades/base64-imagen" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-image w-4 h-4 shrink-0 text-orange-600">  <rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect> <circle cx="9" cy="9" r="2"></circle> <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path>  </svg> <span class="truncate">Base64 imagen</span> </a> </li><li> <a href="/utilidades/url-encode-decode" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-link-2 w-4 h-4 shrink-0 text-green-600">  <path d="M9 17H7A5 5 0 0 1 7 7h2"></path> <path d="M15 7h2a5 5 0 1 1 0 10h-2"></path> <line x1="8" x2="16" y1="12" y2="12"></line>  </svg> <span class="truncate">
187URL encode/decode</span> </a> </li><li> <a href="/utilidades/analizador-de-url" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-unlink w-4 h-4 shrink-0 text-teal-600">  <path d="m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71"></path> <path d="m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71"></path> <line x1="8" x2="8" y1="2" y2="5"></line> <line x1="2" x2="5" y1="8" y2="8"></line> <line x1="16" x2="16" y1="19" y2="22"></line> <line x1="19" x2="22" y1="16" y2="16"></line>  </svg> <span class="truncate">Analizador de URL</span> </a> </li><li> <a href="/utilidades/entidades-html" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-orange-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> <span class="truncate">Entidades HTML</span> </a> </li><li> <a href="/utilidades/escapar-texto" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-slash w-4 h-4 shrink-0 text-red-600">  <path d="M22 2 2 22"></path>  </svg> <span class="truncate">Escapar texto</span> </a> </li><li> <a href="/utilidades/hex-ascii" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-binary w-4 h-4 shrink-0 text-purple-600">  <rect x="14" y="14" width="4" height="6" rx="2"></rect> <rect x="6" y="4" width="4" height="6" rx="2"></rect> <path d="M6 20h4"></path> <path d="M14 10h4"></path> <path d="M6 14h2v6"></path> <path d="M14 4h2v6"></path>  </svg> <span class="truncate">Hex ↔ ASCII</span> </a> </li><li> <a href="/utilidades/conversor-bases-numericas" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-brackets w-4 h-4 shrink-0 text-indigo-600">  <path d="M16 3h3a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1h-3"></path> <path d="M8 21H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h3"></path>  </svg> <span class="truncate">Bases numéricas</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Datos y Formatos</p> <ul class="flex flex-col"> <li> <a href="/utilidades/json-formatter" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-braces w-4 h-4 shrink-0 text-amber-600">  <path d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"></path> <path d="M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"></path>  </svg> <span class="truncate">JSON formatter</span> </a> </li><li> <a href="/utilidades/yaml-a-json" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-braces w-4 h-4 shrink-0 text-blue-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"></path> <path d="M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"></path>  </svg> <span class="truncate">YAML → JSON</span> </a> </li><li> <a href="/utilidades/json-a-yaml" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-braces w-4 h-4 shrink-0 text-emerald-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"></path> <path d="M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"></path>  </svg> <span class="truncate">JSON → YAML</span> </a> </li><li> <a href="/utilidades/json-a-csv" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table w-4 h-4 shrink-0 text-green-600">  <path d="M12 3v18"></path> <rect width="18" height="18" x="3" y="3" rx="2"></rect> <path d="M3 9h18"></path> <path d="M3 15h18"></path>  </svg> <span class="truncate">JSON → CSV</span> </a> </li><li> <a href="/utilidades/csv-a-json" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-database w-4 h-4 shrink-0 text-teal-600">  <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path>  </svg> <span class="truncate">CSV → JSON</span> </a> </li><li> <a href="/utilidades/formatear-xml" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code-corner w-4 h-4 shrink-0 text-orange-600">  <path d="M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m5 16-3 3 3 3"></path> <path d="m9 22 3-3-3-3"></path>  </svg> <span class="truncate">Formatear XML</span> </a> </li><li> <a href="/utilidades/formatear-sql" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-database w-4 h-4 shrink-0 text-indigo-600">  <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path>  </svg> <span class="truncate">Formatear SQL</span> </a> </li><li> <a href="/utilidades/php-serialize" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-terminal w-4 h-4 shrink-0 text-purple-600">  <path d="M12 19h8"></path> <path d="m4 17 6-6-6-6"></path>  </svg> <span class="truncate">PHP serialize</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Código Web</p> <ul class="flex flex-col"> <li> <a href="/utilidades/formatear-html" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-orange-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> <span class="truncate">HTML beautify</span> </a> </li><li> <a href="/utilidades/formatear-css" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-palette w-4 h-4 shrink-0 text-blue-600">  <path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"></path> <circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle> <circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle> <circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle> <circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle>  </svg> <span class="truncate">CSS beautify</span> </a> </li><li> <a href="/utilidades/formatear-javascript" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code-corner w-4 h-4 shrink-0 text-amber-600">  <path d="M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m5 16-3 3 3 3"></path> <path d="m9 22 3-3-3-3"></path>  </svg> <span class="truncate">JS beautify</span> </a> </li><li> <a href="/utilidades/html-a-jsx" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-teal-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> <span class="truncate">HTML → JSX</span> </a> </li><li> <a href="/utilidades/svg-a-css" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-image w-4 h-4 shrink-0 text-purple-600">  <rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect> <circle cx="9" cy="9" r="2"></circle> <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path>  </svg> <span class="truncate">SVG → CSS</span> </a> </li><li> <a href="/utilidades/previsualizar-html" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-green-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> <span class="truncate">Previsualizar HTML</span> </a> </li> </ul> </div><div> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2 px-2">Desarrollo y Seguridad</p> <ul class="flex flex-col"> <li> <a href="/utilidades/unix-timestamp" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-clock w-4 h-4 shrink-0 text-blue-600">  <path d="M12 6v6l4 2"></path> <circle cx="12" cy="12" r="10"></circle>  </svg> <span class="truncate">Unix timestamp</span> </a> </li><li> <a href="/utilidades/jwt-decoder" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-key-round w-4 h-4 shrink-0 text-red-600">  <path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"></path> <circle cx="16.5" cy="7.5" r=".5" fill="currentColor"></circle>  </svg> <span class="truncate">JWT decoder</span> </a> </li><li> <a href="/utilidades/generador-uuid" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-fingerprint-pattern w-4 h-4 shrink-0 text-indigo-600">  <path d="M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"></path> <path d="M14 13.12c0 2.38 0 6.38-1 8.88"></path> <path d="M17.29 21.02c.12-.6.43-2.3.5-3.02"></path> <path d="M2 12a10 10 0 0 1 18-6"></path> <path d="M2 16h.01"></path> <path d="M21.8 16c.2-2 .131-5.354 0-6"></path> <path d="M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2"></path> <path d="M8.65 22c.21-.66.45-1.32.57-2"></path> <path d="M9 6.8a6 6 0 0 1 9 5.2v2"></path>  </svg> <span class="truncate">UUID / ULID</span> </a> </li><li> <a href="/utilidades/regex-tester" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-regex w-4 h-4 shrink-0 text-purple-600">  <path d="M17 3v10"></path> <path d="m12.67 5.5 8.66 5"></path> <path d="m12.67 10.5 8.66-5"></path> <path d="M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z"></path>  </svg> <span class="truncate">Regex tester</span> </a> </li><li> <a href="/utilidades/generador-hash" class="flex item
187s-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-hash w-4 h-4 shrink-0 text-emerald-600">  <line x1="4" x2="20" y1="9" y2="9"></line> <line x1="4" x2="20" y1="15" y2="15"></line> <line x1="10" x2="8" y1="3" y2="21"></line> <line x1="16" x2="14" y1="3" y2="21"></line>  </svg> <span class="truncate">Generador de hash</span> </a> </li><li> <a href="/utilidades/cron-parser" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-calendar-clock w-4 h-4 shrink-0 text-teal-600">  <path d="M16 14v2.2l1.6 1"></path> <path d="M16 2v4"></path> <path d="M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"></path> <path d="M3 10h5"></path> <path d="M8 2v4"></path> <circle cx="16" cy="16" r="6"></circle>  </svg> <span class="truncate">Cron parser</span> </a> </li><li> <a href="/utilidades/certificado-x509" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shield-check w-4 h-4 shrink-0 text-green-600">  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path> <path d="m9 12 2 2 4-4"></path>  </svg> <span class="truncate">Certificado X.509</span> </a> </li><li> <a href="/utilidades/generador-contrasenas" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-key-square w-4 h-4 shrink-0 text-red-600">  <path d="M12.4 2.7a2.5 2.5 0 0 1 3.4 0l5.5 5.5a2.5 2.5 0 0 1 0 3.4l-3.7 3.7a2.5 2.5 0 0 1-3.4 0L8.7 9.8a2.5 2.5 0 0 1 0-3.4z"></path> <path d="m14 7 3 3"></path> <path d="m9.4 10.6-6.814 6.814A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814"></path>  </svg> <span class="truncate">Contraseñas</span> </a> </li><li> <a href="/utilidades/cadena-aleatoria" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shuffle w-4 h-4 shrink-0 text-amber-600">  <path d="m18 14 4 4-4 4"></path> <path d="m18 2 4 4-4 4"></path> <path d="M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22"></path> <path d="M2 6h1.972a4 4 0 0 1 3.6 2.2"></path> <path d="M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45"></path>  </svg> <span class="truncate">Cadenas aleatorias</span> </a> </li><li> <a href="/utilidades/curl-a-codigo" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-terminal w-4 h-4 shrink-0 text-indigo-600">  <path d="M12 19h8"></path> <path d="m4 17 6-6-6-6"></path>  </svg> <span class="truncate">cURL a código</span> </a> </li><li> <a href="/utilidades/codigo-qr" class="flex items-center gap-2 px-2 py-1.5 rounded-lg text-[13px] leading-tight transition-colors hover:bg-slate-100 no-underline text-slate-700"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-qr-code w-4 h-4 shrink-0 text-blue-600">  <rect width="5" height="5" x="3" y="3" rx="1"></rect> <rect width="5" height="5" x="16" y="3" rx="1"></rect> <rect width="5" height="5" x="3" y="16" rx="1"></rect> <path d="M21 16h-3a2 2 0 0 0-2 2v3"></path> <path d="M21 21v.01"></path> <path d="M12 7v3a2 2 0 0 1-2 2H7"></path> <path d="M3 12h.01"></path> <path d="M12 3h.01"></path> <path d="M12 16v.01"></path> <path d="M16 12h1"></path> <path d="M21 12v.01"></path> <path d="M12 21v-1"></path>  </svg> <span class="truncate">Código QR</span> </a> </li> </ul> </div> </div> <a href="/utilidades" class="mt-3 flex items-center justify-center gap-2 px-4 py-2.5 bg-slate-900 text-white text-sm font-bold rounded-xl hover:bg-slate-800 transition-colors no-u
187nderline">
188Ver todas las utilidades →
189</a> </div> </div> </div> <a href="/blog" class="text-sm font-medium transition-colors hover:text-blue-600 text-slate-600">Artículos</a> <a href="/javier-cristobal" class="text-sm font-medium transition-colors hover:text-blue-600 text-slate-600">Sobre mí</a> </nav> </div> <div id="mobile-menu" class="hidden md:hidden bg-white border-b border-slate-200 absolute w-full shadow-2xl origin-top transition-all"> <div class="px-6 pt-4 pb-8 flex flex-col gap-4 text-lg"> <a href="/" class="font-medium text-slate-700 hover:text-blue-600">Inicio</a> <a href="/sintaxis-markdown" class="font-medium text-slate-700 hover:text-blue-600">Sintaxis</a> <a href="/multimarkdown" class="font-medium text-slate-700 hover:text-blue-600">MultiMarkdown</a> <a href="/aplicaciones-markdown" class="font-medium text-slate-700 hover:text-blue-600">Aplicaciones</a> <!-- En movil el desplegable seria incomodo, asi que las herramientas van
190           como un bloque desplegado dentro del propio menu. --> <div class="flex flex-col gap-2"> <a href="/herramientas" class="font-medium text-slate-700 hover:text-blue-600">Herramientas</a> <div class="pl-3 border-l-2 border-slate-100 flex flex-col gap-2.5 py-1"> <div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Conversión de Documentos</p> <a href="/herramientas/markdown-a-html" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-blue-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> Markdown → HTML </a><a href="/herramientas/html-a-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code w-4 h-4 shrink-0 text-orange-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12.5 8 15l2 2.5"></path> <path d="m14 12.5 2 2.5-2 2.5"></path>  </svg> HTML → Markdown </a><a href="/herramientas/markdown-a-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-down w-4 h-4 shrink-0 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 18v-6"></path> <path d="m9 15 3 3 3-3"></path>  </svg> Markdown → PDF </a><a href="/herramientas/pdf-a-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-up w-4 h-4 shrink-0 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 12v6"></path> <path d="m15 15-3-3-3 3"></path>  </svg> PDF → Markdown </a><a href="/herramientas/imagen-a-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scan-text w-4 h-4 shrink-0 text-violet-600">  <path d="M3 7V5a2 2 0 0 1 2-2h2"></path> <path d="M17 3h2a2 2 0 0 1 2 2v2"></path> <path d="M21 17v2a2 2 0 0 1-2 2h-2"></path> <path d="M7 21H5a2 2 0 0 1-2-2v-2"></path> <path d="M7 8h8"></path> <path d="M7 12h10"></path> <path d="M7 16h6"></path>  </svg> Imagen → Markdown </a><a href="/herramientas/markdown-a-word" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-type-corner w-4 h-4 shrink-0 text-blue-600">  <path d="M12 22h6a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v6"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M3 16v-1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V16"></path> <path d="M6 22h2"></path> <path d="M7 14v8"></path>  </svg> Markdown → Word </a><a href="/herramientas/word-a-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-input w-4 h-4 shrink-0 text-indigo-600">  <path d="M4 11V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M2 15h10"></path> <path d="m9 18 3-3-3-3"></path>  </svg> Word → Markdown </a><a href="/herramientas/markdown-a-texto-enriquecido" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-clipboard-type w-4 h-4 shrink-0 text-indigo-600">  <rect width="8" height="4" x="8" y="2" rx="1" ry="1"></rect> <path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path> <path d="M9 12v-1h6v1"></path> <path d="M11 17h2"></path> <path d="M12 11v6"></path>  </svg> Markdown → Texto rico </a><a href="/herramientas/texto-enriquecido-a-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-text w-4 h-4 shrink-0 text-emerald-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 9H8"></path> <path d="M16 13H8"></path> <path d="M16 17H8"></path>  </svg> Texto rico → Markdown </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Herramientas de Tablas</p> <a href="/herramientas/generador-de-tablas" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table-2 w-4 h-4 shrink-0 text-emerald-600">  <path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"></path>  </svg> Generador de tablas </a><a href="/herramientas/csv-a-tabla-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-grid-3x3 w-4 h-4 shrink-0 text-green-600">  <rect width="18" height="18" x="3" y="3" rx="2"></rect> <path d="M3 9h18"></path> <path d="M3 15h18"></path> <path d="M9 3v18"></path> <path d="M15 3v18"></path>  </svg> CSV → Tabla </a><a href="/herramientas/excel-a-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-spreadsheet w-4 h-4 shrink-0 text-green-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M8 13h2"></path> <path d="M14 13h2"></path> <path d="M8 17h2"></path> <path d="M14 17h2"></path>  </svg> Excel → Tabla </a><a href="/herramientas/tabla-markdown-a-html" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table-properties w-4 h-4 shrink-0 text-teal-600">  <path d="M15 3v18"></path> <rect width="18" height="18" x="3" y="3" rx="2"></rect> <path d="M21 9H3"></path> <path d="M21 15H3"></path>  </svg> Tabla → HTML </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Visualización y Análisis</p> <a href="/herramientas/previsualizador" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-eye w-4 h-4 shrink-0 text-purple-600">  <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path> <circle cx="12" cy="12" r="3"></circle>  </svg> Previsualizador </a><a href="/herramientas/markdown-a-mapa-mental" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-brain w-4 h-4 shrink-0 text-indigo-600">  <path d="M12 18V5"></path> <path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"></path> <path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"></path> <path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"></path> <path d="M18 18a4 4 0 0 0 2-7.464"></path> <path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"></path> <path d="M6 18a4 4 0 0 1-2-7.464"></path> <path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"></path>  </svg> Mapa mental </a><a href="/herramientas/json-a-markdown" class="flex items-center gap-2 text-sm text-slate-600 hover:text-blue-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-braces w-4 h-4 shrink-0 text-amber-600">  <path d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"></path> <path d="M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"></path>  </svg> JSON → Markdown </a> </div> </div> </div> <div class="flex flex-col gap-2"> <a href="/utilidades" class="font-medium text-slate-700 hover:text-emerald-600">Utilidades</a> <div class="pl-3 border-l-2 border-slate-100 flex flex-col gap-2.5 py-1"> <div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Herramientas PDF</p> <a href="/utilidades/unir-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-combine w-4 h-4 shrink-0 text-red-600">  <path d="M14 3a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1"></path> <path d="M19 3a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1"></path> <path d="m7 15 3 3"></path> <path d="m7 21 3-3H5a2 2 0 0 1-2-2v-2"></path> <rect x="14" y="14" width="7" height="7" rx="1"></rect> <rect x="3" y="3" width="7" height="7" rx="1"></rect>  </svg> Unir PDF </a><a href="/utilidades/dividir-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scissors w-4 h-4 shrink-0 text-red-600">  <circle cx="6" cy="6" r="3"></circle> <path d="M8.12 8.12 12 12"></path> <path d="M20 4 8.12 15.88"></path> <circle cx="6" cy="18" r="3"></circle> <path d="M14.8 14.8 20 20"></path>  </svg> Dividir PDF </a><a href="/utilidades/comprimir-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-minimize-2 w-4 h-4 shrink-0 text-orange-600">  <path d="m14 10 7-7"></path> <path d="M20 10h-6V4"></path> <path d="m3 21 7-7"></path> <path d="M4 14h6v6"></path>  </svg> Comprimir PDF </a><a href="/utilidades/eliminar-paginas-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-x-corner w-4 h-4 shrink-0 text-orange-600">  <path d="M11 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m15 17 5 5"></path> <path d="m20 17-5 5"></path>  </svg> Eliminar páginas </a><a href="/utilidades/extraer-paginas-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-output w-4 h-4 shrink-0 text-orange-600">  <path d="M4.226 20.925A2 2 0 0 0 6 22h12a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v3.127"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m5 11-3 3"></path> <path d="m5 17-3-3h10"></path>  </svg> Extraer páginas </a><a href="/utilidades/ordenar-paginas-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-arrow-down-up w-4 h-4 shrink-0 text-orange-600">  <path d="m3 16 4 4 4-4"></path> <path d="M7 20V4"></path> <path d="m21 8-4-4-4 4"></path> <path d="M17 4v16"></path>  </svg> Ordenar páginas </a><a href="/utilidades/rotar-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-rotate-cw w-4 h-4 shrink-0 text-red-600">  <path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"></path> <path d="M21 3v5h-5"></path>  </svg> Rotar PDF </a><a href="/utilidades/numerar-paginas-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="curren
190tColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-hash w-4 h-4 shrink-0 text-orange-600">  <line x1="4" x2="20" y1="9" y2="9"></line> <line x1="4" x2="20" y1="15" y2="15"></line> <line x1="10" x2="8" y1="3" y2="21"></line> <line x1="16" x2="14" y1="3" y2="21"></line>  </svg> Numerar páginas </a><a href="/utilidades/marca-de-agua-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-stamp w-4 h-4 shrink-0 text-orange-600">  <path d="M14 13V8.5C14 7 15 7 15 5a3 3 0 0 0-6 0c0 2 1 2 1 3.5V13"></path> <path d="M20 15.5a2.5 2.5 0 0 0-2.5-2.5h-11A2.5 2.5 0 0 0 4 15.5V17a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1z"></path> <path d="M5 22h14"></path>  </svg> Marca de agua </a><a href="/utilidades/jpg-a-pdf" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-image-plus w-4 h-4 shrink-0 text-red-600">  <path d="M16 5h6"></path> <path d="M19 2v6"></path> <path d="M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5"></path> <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path> <circle cx="9" cy="9" r="2"></circle>  </svg> JPG → PDF </a><a href="/utilidades/pdf-a-jpg" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-image w-4 h-4 shrink-0 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <circle cx="10" cy="12" r="2"></circle> <path d="m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22"></path>  </svg> PDF → JPG </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Herramientas de Imagen</p> <a href="/utilidades/heic-a-jpg" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-smartphone w-4 h-4 shrink-0 text-purple-600">  <rect width="14" height="20" x="5" y="2" rx="2" ry="2"></rect> <path d="M12 18h.01"></path>  </svg> HEIC → JPG </a><a href="/utilidades/png-a-jpg" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-images w-4 h-4 shrink-0 text-blue-600">  <path d="m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16"></path> <path d="M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2"></path> <circle cx="13" cy="7" r="1" fill="currentColor"></circle> <rect x="8" y="2" width="14" height="14" rx="2"></rect>  </svg> PNG → JPG </a><a href="/utilidades/jpg-a-png" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-image w-4 h-4 shrink-0 text-blue-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <circle cx="10" cy="12" r="2"></circle> <path d="m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22"></path>  </svg> JPG → PNG </a><a href="/utilidades/webp-a-jpg" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shapes w-4 h-4 shrink-0 text-teal-600">  <path d="M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z"></path> <rect x="3" y="14" width="7" height="7" rx="1"></rect> <circle cx="17.5" cy="17.5" r="3.5"></circle>  </svg> WebP → JPG </a><a href="/utilidades/comprimir-imagen" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shrink w-4 h-4 shrink-0 text-emerald-600">  <path d="m15 15 6 6m-6-6v4.8m0-4.8h4.8"></path> <path d="M9 19.8V15m0 0H4.2M9 15l-6 6"></path> <path d="M15 4.2V9m0 0h4.8M15 9l6-6"></path> <path d="M9 4.2V9m0 0H4.2M9 9 3 3"></path>  </svg> Comprimir imagen </a><a href="/utilidades/redimensionar-imagen" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-expand w-4 h-4 shrink-0 text-green-600">  <path d="m15 15 6 6"></path> <path d="m15 9 6-6"></path> <path d="M21 16v5h-5"></path> <path d="M21 8V3h-5"></path> <path d="M3 16v5h5"></path> <path d="m3 21 6-6"></path> <path d="M3 8V3h5"></path> <path d="M9 9 3 3"></path>  </svg> Redimensionar </a><a href="/utilidades/svg-a-png" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shapes w-4 h-4 shrink-0 text-indigo-600">  <path d="M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z"></path> <rect x="3" y="14" width="7" height="7" rx="1"></rect> <circle cx="17.5" cy="17.5" r="3.5"></circle>  </svg> SVG → PNG </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Texto y Escritura</p> <a href="/utilidades/contador-de-palabras" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-pilcrow w-4 h-4 shrink-0 text-blue-600">  <path d="M13 4v16"></path> <path d="M17 4v16"></path> <path d="M19 4H9.5a4.5 4.5 0 0 0 0 9H13"></path>  </svg> Contador de palabras </a><a href="/utilidades/comparar-textos" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-git-compare w-4 h-4 shrink-0 text-purple-600">  <circle cx="18" cy="18" r="3"></circle> <circle cx="6" cy="6" r="3"></circle> <path d="M13 6h3a2 2 0 0 1 2 2v7"></path> <path d="M11 18H8a2 2 0 0 1-2-2V9"></path>  </svg> Comparar textos </a><a href="/utilidades/convertir-mayusculas-minusculas" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-type w-4 h-4 shrink-0 text-emerald-600">  <path d="M12 4v16"></path> <path d="M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2"></path> <path d="M9 20h6"></path>  </svg> Mayús. y minús. </a><a href="/utilidades/ordenar-lineas" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-list-ordered w-4 h-4 shrink-0 text-teal-600">  <path d="M11 5h10"></path> <path d="M11 12h10"></path> <path d="M11 19h10"></path> <path d="M4 4h1v5"></path> <path d="M4 9h2"></path> <path d="M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02"></path>  </svg> Ordenar líneas </a><a href="/utilidades/lorem-ipsum" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scroll-text w-4 h-4 shrink-0 text-amber-600">  <path d="M15 12h-5"></path> <path d="M15 8h-5"></path> <path d="M19 17V5a2 2 0 0 0-2-2H4"></path> <path d="M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3"></path>  </svg> Lorem ipsum </a><a href="/utilidades/analizador-de-texto" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-baseline w-4 h-4 shrink-0 text-indigo-600">  <path d="M4 20h16"></path> <path d="m6 16 6-12 6 12"></path> <path d="M8 12h8"></path>  </svg> Analizador de texto </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Codificar y Decodificar</p> <a href="/utilidades/base64" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-binary w-4 h-4 shrink-0 text-blue-600">  <rect x="14" y="14" width="4" height="6" rx="2"></rect> <rect x="6" y="4" width="4" height="6" rx="2"></rect> <path d="M6 20h4"></path> <path d="M14 10h4"></path> <path d="M6 14h2v6"></path> <path d="M14 4h2v6"></path>  </svg> Base64 texto </a><a href="/utilidades/base64-imagen" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-image w-4 h-4 shrink-0 text-orange-600">  <rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect> <circle cx="9" cy="9" r="2"></circle> <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path>  </svg> Base64 imagen </a><a href="/utilidades/url-encode-decode" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-link-2 w-4 h-4 shrink-0 text-green-600">  <path d="M9 17H7A5 5 0 0 1 7 7h2"></path> <path d="M15 7h2a5 5 0 1 1 0 10h-2"></path> <line x1="8" x2="16" y1="12" y2="12"></line>  </svg> URL encode/decode </a><a href="/utilidades/analizador-de-url" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-unlink w-4 h-4 shrink-0 text-teal-600">  <path d="m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71"></path> <path d="m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71"></path> <line x1="8" x2="8" y1="2" y2="5"></line> <line x1="2" x2="5" y1="8" y2="8"></line> <line x1="16" x2="16" y1="19" y2="22"></line>
190 <line x1="19" x2="22" y1="16" y2="16"></line>  </svg> Analizador de URL </a><a href="/utilidades/entidades-html" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-orange-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> Entidades HTML </a><a href="/utilidades/escapar-texto" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-slash w-4 h-4 shrink-0 text-red-600">  <path d="M22 2 2 22"></path>  </svg> Escapar texto </a><a href="/utilidades/hex-ascii" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-binary w-4 h-4 shrink-0 text-purple-600">  <rect x="14" y="14" width="4" height="6" rx="2"></rect> <rect x="6" y="4" width="4" height="6" rx="2"></rect> <path d="M6 20h4"></path> <path d="M14 10h4"></path> <path d="M6 14h2v6"></path> <path d="M14 4h2v6"></path>  </svg> Hex ↔ ASCII </a><a href="/utilidades/conversor-bases-numericas" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-brackets w-4 h-4 shrink-0 text-indigo-600">  <path d="M16 3h3a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1h-3"></path> <path d="M8 21H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h3"></path>  </svg> Bases numéricas </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Datos y Formatos</p> <a href="/utilidades/json-formatter" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-braces w-4 h-4 shrink-0 text-amber-600">  <path d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"></path> <path d="M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"></path>  </svg> JSON formatter </a><a href="/utilidades/yaml-a-json" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-braces w-4 h-4 shrink-0 text-blue-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"></path> <path d="M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"></path>  </svg> YAML → JSON </a><a href="/utilidades/json-a-yaml" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-braces w-4 h-4 shrink-0 text-emerald-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"></path> <path d="M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"></path>  </svg> JSON → YAML </a><a href="/utilidades/json-a-csv" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table w-4 h-4 shrink-0 text-green-600">  <path d="M12 3v18"></path> <rect width="18" height="18" x="3" y="3" rx="2"></rect> <path d="M3 9h18"></path> <path d="M3 15h18"></path>  </svg> JSON → CSV </a><a href="/utilidades/csv-a-json" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-database w-4 h-4 shrink-0 text-teal-600">  <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path>  </svg> CSV → JSON </a><a href="/utilidades/formatear-xml" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code-corner w-4 h-4 shrink-0 text-orange-600">  <path d="M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m5 16-3 3 3 3"></path> <path d="m9 22 3-3-3-3"></path>  </svg> Formatear XML </a><a href="/utilidades/formatear-sql" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-database w-4 h-4 shrink-0 text-indigo-600">  <ellipse cx="12" cy="5" rx="9" ry="3"></ellipse> <path d="M3 5V19A9 3 0 0 0 21 19V5"></path> <path d="M3 12A9 3 0 0 0 21 12"></path>  </svg> Formatear SQL </a><a href="/utilidades/php-serialize" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-terminal w-4 h-4 shrink-0 text-purple-600">  <path d="M12 19h8"></path> <path d="m4 17 6-6-6-6"></path>  </svg> PHP serialize </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Código Web</p> <a href="/utilidades/formatear-html" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-orange-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> HTML beautify </a><a href="/utilidades/formatear-css" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-palette w-4 h-4 shrink-0 text-blue-600">  <path d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"></path> <circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle> <circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle> <circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle> <circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle>  </svg> CSS beautify </a><a href="/utilidades/formatear-javascript" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code-corner w-4 h-4 shrink-0 text-amber-600">  <path d="M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="m5 16-3 3 3 3"></path> <path d="m9 22 3-3-3-3"></path>  </svg> JS beautify </a><a href="/utilidades/html-a-jsx" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-teal-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> HTML → JSX </a><a href="/utilidades/svg-a-css" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-image w-4 h-4 shrink-0 text-purple-600">  <rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect> <circle cx="9" cy="9" r="2"></circle> <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path>  </svg> SVG → CSS </a><a href="/utilidades/previsualizar-html" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-4 h-4 shrink-0 text-green-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> Previsualizar HTML </a> </div><div class="flex flex-col gap-1"> <p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Desarrollo y Seguridad</p> <a href="/utilidades/unix-timestamp" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-clock w-4 h-4 shrink-0 text-blue-600">  <path d="M12 6v6l4 2"></path> <circle cx="12" cy="12" r="10"></circle>  </svg> Unix timestamp </a><a href="/utilidades/jwt-decoder" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-key-round w-4 h-4 shrink-0 text-red-600">  <path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"></path> <circle cx="16.5" cy="7.5" r=".5" fill="currentColor"></circle>  </svg> JWT decoder </a><a href="/utilidades/generador-uuid" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-fingerprint-pattern w-4 h-4 shrink-0 text-indigo-600">  <path d="M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"></path> <path d="M14 13.12c0 2.38 0 6.38-1 8.88"></path> <path d="M17.29 21.02c.12-.6.43-2.3.5-3.02"></path> <path d="M2 12a10 10 0 0 1 18-6"></path> <path d="M2 16h.01"></path> <path d="M21.8 16c.2-2 .131-5.354 0-6"></path> <path d="M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2"></path> <path d="M8.65 22c.21-.66.45-1.32.57-2"></path> <path d="M9 6.8a6 6 0 0 1 9 5.2v2"></path>  </svg> UUID / ULID </a><a href="/utilidades/regex-tester" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-regex w-4 h-4 shrink-0 text-purple-600">  <path d="M17 3v10"></path> <path d="m12.67 5.5 8.66 5"></path> <path d="m12.67 10.5 8.66-5"></path> <path d="M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z"></path>  </svg> Regex tester </a><a href="/utilidades/generador-hash" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-hash w-4 h-4 shrink-0 text-emerald-600">  <line x1="4" x2="20" y1="9" y2="9"></line> <line x1="4" x2="20" y1="15" y2="15"></line> <line x1="10" x2="8" y1="3" y2="21"></line> <line x1="16" x2="14" y1="3" y2="21"></line>  </svg> Generador de hash </a><a href="/utilidades/cron-parser" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-calendar-clock w-4 h-4 shrink-0 text-teal-600">  <path d="M16 14v2.2l1.6 1"></path> <path d="M16 2v4"></path> <path d="M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"></path> <path d="M3 10h5"></path> <path d="M8 2v4"></path> <circle cx="16" cy="16" r="6"></circle>  </svg> Cron parser </a><a href="/utilidades/certificado-x509" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shield-check w-4 h-4 shrink-0 text-green-600">  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path> <path d="m9 12 2 2 4-4"></path>  </svg> Certificado X.509 </a><a href="/utilidades/generador-contrasenas" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-key-square w-4 h-4 shrink-0 text-red-600">  <path d="M12.4 2.7a2.5 2.5 0 0 1 3.4 0l5.5 5.5a2.5 2.5 0 0 1 0 3.4l-3.7 3.7a2.5 2.5 0 0 1-3.4 0L8.7 9.8a2.5 2.5 0 0 1 0-3.4z"></path> <path d="m14 7 3 3"></path> <path d="m9.4 10.6-6.814 6.814A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814"></path>  </svg> Contraseñas </a>
190<a href="/utilidades/cadena-aleatoria" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-shuffle w-4 h-4 shrink-0 text-amber-600">  <path d="m18 14 4 4-4 4"></path> <path d="m18 2 4 4-4 4"></path> <path d="M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22"></path> <path d="M2 6h1.972a4 4 0 0 1 3.6 2.2"></path> <path d="M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45"></path>  </svg> Cadenas aleatorias </a><a href="/utilidades/curl-a-codigo" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-terminal w-4 h-4 shrink-0 text-indigo-600">  <path d="M12 19h8"></path> <path d="m4 17 6-6-6-6"></path>  </svg> cURL a código </a><a href="/utilidades/codigo-qr" class="flex items-center gap-2 text-sm text-slate-600 hover:text-emerald-600 no-underline"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-qr-code w-4 h-4 shrink-0 text-blue-600">  <rect width="5" height="5" x="3" y="3" rx="1"></rect> <rect width="5" height="5" x="16" y="3" rx="1"></rect> <rect width="5" height="5" x="3" y="16" rx="1"></rect> <path d="M21 16h-3a2 2 0 0 0-2 2v3"></path> <path d="M21 21v.01"></path> <path d="M12 7v3a2 2 0 0 1-2 2H7"></path> <path d="M3 12h.01"></path> <path d="M12 3h.01"></path> <path d="M12 16v.01"></path> <path d="M16 12h1"></path> <path d="M21 12v.01"></path> <path d="M12 21v-1"></path>  </svg> Código QR </a> </div> </div> </div> <a href="/blog" class="font-medium text-slate-700 hover:text-blue-600">Artículos</a> <a href="/javier-cristobal" class="font-medium text-slate-700 hover:text-blue-600">Sobre mí</a> </div> </div> </header> 
190<script type="module">const e=document.getElementById("mobile-menu-button"),n=document.getElementById("mobile-menu"),t=document.getElementById("menu-icon-open"),o=document.getElementById("menu-icon-close");e&&n&&t&&o&&e.addEventListener("click",()=>{n.classList.toggle("hidden"),t.classList.toggle("hidden"),o.classList.toggle("hidden")});</script>
190  <!-- Pegado justo bajo el header (h-16), con z menor que el suyo para que el
191     desplegable de Herramientas siga cayendo por encima de esta barra. -->
192<div class="w-full border-b border-slate-200/70 bg-white/85 backdrop-blur-md sticky top-16 z-40"><div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-2.5"><div id="site-search" class="relative max-w-2xl mx-auto" data-open="false"><div class="relative"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-search w-4 h-4 absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none">  <path d="m21 21-4.34-4.34"></path> <circle cx="11" cy="11" r="8"></circle>  </svg><input type="text" id="site-search-input" role="combobox" aria-expanded="false" aria-controls="site-search-results" aria-autocomplete="list" aria-label="Buscar herramientas, utilidades y guías" autocomplete="off" placeholder="Buscar herramienta, utilidad o guía…" class="w-full pl-10 pr-20 py-2 bg-white border border-slate-200 rounded-full text-sm text-slate-800 placeholder:text-slate-400 shadow-sm focus:outline-none focus:border-blue-400 focus:ring-4 focus:ring-blue-100 transition-all"><!-- Atajo de teclado. Comparte sitio con la "x" de limpiar: se esconde
193             en cuanto hay texto escrito. --><kbd id="site-search-kbd" class="hidden sm:flex absolute right-3 top-1/2 -translate-y-1/2 items-center gap-0.5 px-1.5 py-0.5 text-[10px] font-sans font-semibold text-slate-400 bg-slate-100 border border-slate-200 rounded pointer-events-none"><span class="text-[11px] leading-none">/</span></kbd><button type="button" id="site-search-clear" aria-label="Limpiar búsqueda" class="hidden absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-700 transition-colors"><svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></button></div><!-- Panel de resultados y sugerencias --><div id="site-search-panel" class="hidden absolute left-0 right-0 top-full mt-2 bg-white border border-slate-200 rounded-2xl shadow-2xl shadow-slate-900/10 overflow-hidden z-50"><!-- Estado vacio: pistas de lo que se puede buscar --><div id="site-search-tips" class="p-4"><p class="text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2.5">Prueba a buscar</p><div class="flex flex-wrap gap-1.5"><button type="button" data-tip="pdf" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">PDF</button><button type="button" data-tip="json" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">JSON</button><button type="button" data-tip="tabla" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">Tablas</button><button type="button" data-tip="word" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">Word</button><button type="button" data-tip="comprimir imagen" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">Comprimir imagen</button><button type="button" data-tip="base64" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">Base64</button><button type="button" data-tip="contar palabras" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">Contar palabras</button><button type="button" data-tip="sintaxis" class="px-2.5 py-1 text-xs font-medium text-slate-600 bg-slate-100 hover:bg-blue-50 hover:text-blue-700 border border-transparent hover:border-blue-200 rounded-full transition-colors">Sintaxis</button></div><p class="text-xs text-slate-400 mt-3">100 páginas: conversores de Markdown, utilidades de PDF e imagen, formateadores de código y las guías de sintaxis.
194</p></div><ul id="site-search-results" role="listbox" class="hidden max-h-[22rem] overflow-y-auto py-1.5"></ul><div id="site-search-empty" class="hidden px-4 py-6 text-center"><p class="text-sm text-slate-500">Nada coincide con <span id="site-search-empty-q" class="font-semibold text-slate-700"></span>.</p><p class="text-xs text-slate-400 mt-1.5">
195Mira el <a href="/herramientas" class="text-blue-600 hover:underline">índice de herramientas</a> o el de <a href="/utilidades" class="text-blue-600 hover:underline">utilidades</a>.
196</p></div></div></div></div></div>
197
198<script>(function(){const INDEX = [{"t":"Markdown → HTML","u":"/herramientas/markdown-a-html","d":"Convierte a código HTML limpio en tiempo real.","s":"herramienta","kw":"md html renderizar compilar etiquetas web","p":true},{"t":"HTML → Markdown","u":"/herramientas/html-a-markdown","d":"Limpia código HTML y lo convierte a Markdown portable.","s":"herramienta","kw":"html md limpiar scraping pegar web","p":false},{"t":"Markdown → PDF","u":"/herramientas/markdown-a-pdf","d":"Exporta a PDF listo para imprimir o compartir.","s":"herramienta","kw":"md pdf imprimir exportar documento","p":false},{"t":"PDF → Markdown","u":"/herramientas/pdf-a-markdown","d":"Extrae el texto de un PDF sin subirlo a ningún servidor.","s":"herramienta","kw":"pdf md extraer texto ocr documento","p":false},{"t":"Imagen → Markdown (OCR)","u":"/herramientas/imagen-a-markdown","d":"Lee el texto de una captura o foto con OCR, sin salir de tu navegador.","s":"herramienta","kw":"ocr captura foto screenshot imagen texto reconocer png jpg","p":false},{"t":"Markdown → Word","u":"/herramientas/markdown-a-word","d":"Descarga un .docx real con estilos nativos de Word.","s":"herramienta","kw":"md word docx office microsoft doc","p":false},{"t":"Word → Markdown","u":"/herramientas/word-a-markdown","d":"Convierte .docx conservando encabezados, listas y tablas.","s":"herramienta","kw":"word docx md office microsoft doc importar","p":false},{"t":"Markdown → Texto Enriquecido","u":"/herramientas/markdown-a-texto-enriquecido","d":"Exporta RTF manteniendo formato de Word o correos.","s":"herramienta","kw":"rtf texto rico word correo email pegar formato","p":false},{"t":"Texto Enriquecido → Markdown","u":"/herramientas/texto-enriquecido-a-markdown","d":"Pega de
198sde Word o Pages y obtén Markdown instantáneo.","s":"herramienta","kw":"rtf texto rico pegar word pages copiar formato","p":false},{"t":"Generador Visual de Tablas","u":"/herramientas/generador-de-tablas","d":"Editor tipo hoja de cálculo, sin escribir barras verticales.","s":"herramienta","kw":"tabla crear editor hoja calculo celdas pipes barras","p":true},{"t":"CSV → Tabla Markdown","u":"/herramientas/csv-a-tabla-markdown","d":"Pega tu CSV y obtén la tabla Markdown al instante.","s":"herramienta","kw":"csv tabla comas excel importar datos","p":false},{"t":"Excel → Tabla Markdown","u":"/herramientas/excel-a-markdown","d":"Sube el .xlsx o pega las celdas desde Excel o Sheets.","s":"herramienta","kw":"excel xlsx tabla hoja calculo sheets celdas datos","p":false},{"t":"Tabla Markdown → HTML","u":"/herramientas/tabla-markdown-a-html","d":"Solo la tabla, con Bootstrap, Tailwind o CSS embebido.","s":"herramienta","kw":"tabla html bootstrap tailwind css table","p":false},{"t":"Previsualizador Markdown","u":"/herramientas/previsualizador","d":"Renderiza Markdown con estilos tipográficos pulidos.","s":"herramienta","kw":"preview ver render vista previa editor escribir probar","p":false},{"t":"Markdown → Mapa Mental","u":"/herramientas/markdown-a-mapa-mental","d":"Mapa mental interactivo descargable como PNG o SVG.","s":"herramienta","kw":"mapa mental mindmap esquema markmap diagrama","p":false},{"t":"JSON → Markdown","u":"/herramientas/json-a-markdown","d":"Documenta JSON como tablas, listas o esquema de tipos.","s":"herramienta","kw":"json md api documentar tabla esquema","p":false},{"t":"Unir PDF","u":"/utilidades/unir-pdf","d":"Combina varios PDF en uno y ordena las páginas a tu gusto.","s":"utilidad","kw":"unir juntar combinar merge fusionar pdf varios","p":true},{"t":"Dividir PDF","u":"/utilidades/dividir-pdf","d":"Separa un PDF por rangos de páginas o extrae páginas sueltas.","s":"utilidad","kw":"dividir separar split partir cortar pdf","p":false},{"t":"Comprimir PDF","u":"/utilidades/comprimir-pdf","d":"Reduce el pe
198so de un PDF sin destrozar la calidad.","s":"utilidad","kw":"comprimir reducir peso tamano adelgazar optimizar pdf mb","p":false},{"t":"Eliminar páginas de un PDF","u":"/utilidades/eliminar-paginas-pdf","d":"Quita las páginas que no necesitas y descarga el PDF limpio.","s":"utilidad","kw":"eliminar borrar quitar paginas pdf","p":false},{"t":"Extraer páginas de un PDF","u":"/utilidades/extraer-paginas-pdf","d":"Quédate solo con las páginas que te interesan de un documento largo.","s":"utilidad","kw":"extraer sacar separar paginas pdf","p":false},{"t":"Ordenar páginas de un PDF","u":"/utilidades/ordenar-paginas-pdf","d":"Reorganiza, mueve o duplica las páginas de un PDF a tu gusto.","s":"utilidad","kw":"ordenar reordenar mover organizar paginas pdf","p":false},{"t":"Rotar PDF","u":"/utilidades/rotar-pdf","d":"Endereza las páginas torcidas de un escaneo, todas o solo algunas.","s":"utilidad","kw":"rotar girar enderezar escaneo torcido pdf grados","p":false},{"t":"Numerar páginas de un PDF","u":"/utilidades/numerar-paginas-pdf","d":"Añade números de página eligiendo posición, formato y desde dónde empiezan.","s":"utilidad","kw":"numerar numeros paginacion foliar paginas pdf","p":false},{"t":"Marca de agua en PDF","u":"/utilidades/marca-de-agua-pdf","d":"Marca un documento como borrador, copia o confidencial antes de enviarlo.","s":"utilidad","kw":"marca agua 
198watermark borrador confidencial sello pdf","p":false},{"t":"JPG a PDF","u":"/utilidades/jpg-a-pdf","d":"Convierte tus imágenes en un único PDF, en el orden que elijas.","s":"utilidad","kw":"jpg jpeg png imagen foto a pdf convertir varias","p":false},{"t":"PDF a JPG","u":"/utilidades/pdf-a-jpg","d":"Convierte cada página de un PDF en una imagen JPG o PNG.","s":"utilidad","kw":"pdf jpg jpeg png imagen convertir paginas capturar","p":false},{"t":"HEIC a JPG","u":"/utilidades/heic-a-jpg","d":"Convierte las fotos HEIC del iPhone al JPG de toda la vida.","s":"utilidad","kw":"heic jpg iphone ios apple foto convertir abrir","p":false},{"t":"PNG a JPG","u":"/utilidades/png-a-jpg","d":"Pasa PNG a JPG eligiendo el color de fondo y la calidad.","s":"utilidad","kw":"png jpg jpeg convertir fondo transparencia","p":false},{"t":"JPG a PNG","u":"/utilidades/jpg-a-png","d":"Convierte JPG a PNG sin pérdida, listo para editar.","s":"utilidad","kw":"jpg jpeg png convertir transparencia sin perdida","p":false},{"t":"WebP a JPG","u":"/utilidades/webp-a-jpg","d":"Convierte imágenes WebP a JPG compatible con cualquier programa.","s":"utilidad","kw":"webp jpg jpeg google convertir abrir descargada","p":false},{"t":"Comprimir imagen","u":"/utilidades/comprimir-imagen","d":"Baja el peso de tus JPG y PNG ajustando la calidad en vivo.","s":"utilidad","kw":"comprimir reducir peso optimizar imagen foto jpg png kb tinypng","p":true},{"t":"Redimensionar imagen","u":"/utilidades/redimensionar-imagen","d":"Cambia el tamaño en píxeles o porcentaje manteniendo la proporción.","s":"utilidad","kw":"redimensionar resize escalar tamano pixeles ancho alto imagen","p":false},{"t":"SVG a PNG","u":"/utilidades/svg-a-png","d":"Rasteriza un SVG a PNG en la resolución que necesites.","s":"utilidad","kw":"svg png vector rasterizar exportar logo icono","p":false},{"t":"Contador de Palabras y Caracteres","u":"/utilidades/contador-de-palabras","d":"Palabras, caracteres, frases y tiempo de lectura en tiempo real.","s":"utilidad","kw":"contar palabras caracteres letras tiempo lectura twitter limite","p":true},{"t":"Comparar Textos (Diff)","u":"/utilidades/comparar-textos","d":"Encuentra las diferencias entre dos textos, línea a línea o palabra a palabra.","s":"utilidad","kw":"comparar diff diferencias cambios dos textos git","p":false},{"t":"Convertir Mayúsculas y Minúsculas","u":"/utilidades/convertir-mayusculas-minusculas","d":"MAYÚSCULAS, minúsculas, Tipo Título, camelCase, snake_case y más.","s":"utilidad","kw":"mayusculas minusculas capitalizar camelcase snakecase kebab slug titulo","p":false},{"t":"Ordenar y Eliminar Líneas Duplicadas","u":"/utilidades/ordenar-lineas","d":"Ordena alfabética o numéricamente y quita las líneas repetidas.","s":"utilidad","kw":"ordenar alfabeticamente duplicados repetidos lineas lista limpiar","p":false},{"t":"Generador de Lorem Ipsum","u":"/utilidades/lorem-ipsum","d":"Texto de relleno en párrafos, frases o palabras, clásico o en español.","s":"utilidad","kw":"lorem ipsum relleno placeholder texto falso dummy maqueta","p":false},{"t":"Analizador de Texto","u":"/utilidades/analizador-de-texto","d":"Frecuencia de palabras, longitudes, códigos de carácter y caracteres invisibles.","s":"utilidad","kw":"analizar frecuencia palabras caracteres invisibles unicode estadisticas","p":false},{"t":"Base64 Encode y Decode","u":"/utilidades/base64","d":"Codifica y decodifica texto en Base64, con soporte UTF-8 y URL-safe.","s":"utilidad","kw":"base64 codificar decodificar encode decode texto cifrar","p":true},{"t":"Base64 a Imagen y Imagen a Base64","u":"/utilidades/base64-imagen","d":"Convierte imágenes a data URI y recupera la imagen desde Base64.","s":"utilidad","kw":"base64 imagen data uri foto png jpg embebida inline","p":false},{"t":"URL Encode y Decode","u":"/utilidades/url-encode-decode","d":"Codifica y decodifica URLs y parámetros con porcentaje.","s":"utilidad","kw":"url encode decode codificar porcentaje parametros querystring","p":false},{"t":"Analizador de URL","u":"/utilidades/analizador-de-url","d":"Desglosa protocolo, dominio, ruta y parámetros de cualquier URL.","s":"utilidad","kw":"url analizar desglosar parametros dominio query utm","p":false},{"t":"Entidades HTML","u":"/utilidades/entidades-html","d":"Escapa y desescapa símbolos y tildes a entidades HTML.","s":"utilidad","kw":"entidades html escapar ampersand tildes simbolos 
198nbsp","p":false},{"t":"Escapar y Desescapar Texto","u":"/utilidades/escapar-texto","d":"Escapa comillas y saltos de línea para JSON, JavaScript, SQL o CSV.","s":"utilidad","kw":"escapar comillas json javascript sql csv saltos backslash","p":false},{"t":"Hex a ASCII y ASCII a Hex","u":"/utilidades/hex-ascii","d":"Convierte texto a hexadecimal y hexadecimal a texto legible.","s":"utilidad","kw":"hex hexadecimal ascii texto convertir bytes","p":false},{"t":"Conversor de Bases Numéricas","u":"/utilidades/conversor-bases-numericas","d":"Binario, octal, decimal y hexadecimal, en cualquier dirección.","s":"utilidad","kw":"binario octal decimal hexadecimal base convertir numeros bits","p":false},{"t":"Formatear y Validar JSON","u":"/utilidades/json-formatter","d":"Formatea, valida y minifica JSON con errores señalados por línea.","s":"utilidad","kw":"json formatear validar indentar minificar pretty print embellecer","p":true},{"t":"YAML a JSON","u":"/utilidades/yaml-a-json","d":"Convierte YAML a JSON válido directamente en el navegador.","s":"utilidad","kw":"yaml yml json convertir configuracion","p":false},{"t":"JSON a YAML","u":"/utilidades/json-a-yaml","d":"Convierte JSON a YAML legible, ideal para ficheros de configuración.","s":"utilidad","kw":"json yaml yml convertir configuracion docker","p":false},{"t":"JSON a CSV","u":"/utilidades/json-a-csv","d":"Convierte un array de objetos JSON en CSV listo para Excel.","s":"utilidad","kw":"json csv excel tabla exportar array","p":false},{"t":"CSV a JSON","u":"/utilidades/csv-a-json","d":"Convierte CSV en un array de objetos JSON, con tipos automáticos.","s":"utilidad","kw":"csv json convertir array objetos importar","p":false},{"t":"Formatear XML","u":"/utilidades/formatear-xml","d":"Indenta, valida y minifica XML con detección de errores.","s":"utilidad","kw":"xml formatear indentar validar minificar rss","p":true},{"t":"Formatear SQL","u":"/utilidades/formatear-sql","d":"Indenta consultas SQL largas y las deja legibles al instante.","s":"utilidad","kw":"sql formatear indentar consulta query legible mysql postgres","p":true},{"t":"PHP Serialize y Unserialize","u":"/utilidades/php-serialize","d":"Convierte entre JSON y el formato serializado de PHP.","s":"utilidad","kw":"php serialize unserialize wordpress json array","p":false},{"t":"Formatear y Minificar HTML","u":"/utilidades/formatear-html","d":"Indenta HTML desordenado o lo minifica para producción.","s":"utilidad","kw":"html formatear indentar minificar beautify limpiar","p":true},{"t":"Formatear y Minificar CSS","u":"/utilidades/formatear-css","d":"Ordena e indenta CSS, o lo comprime quitando espacios y comentarios.","s":"utilidad","kw":"css formatear indentar minificar beautify comprimir","p":true},{"t":"Formatear y Minificar JavaScript","u":"/utilidades/formatear-javascript","d":"Indenta y minifica JavaScript, incluido código de una sola línea.","s":"utilidad","kw":"javascript js formatear indentar minificar beautify desminificar","p":true},{"t":"HTML a JSX","u":"/utilidades/html-a-jsx","d":"Convierte HTML a JSX de React: class, for, style y etiquetas cerradas.","s":"utilidad","kw":"html jsx react convertir className componente","p":false},{"t":"SVG a CSS","u":"/utilidades/svg-a-css","d":"Convierte un SVG en data URI listo para background-image.","s":"utilidad","kw":"svg css data uri background image icono fondo","p":false},{"t":"Previsualizar HTML","u":"/utilidades/previsualizar-html","d":"Escribe HTML y ve el resultado renderizado al momento.","s":"utilidad","kw":"html previsualizar probar ver render editor live","p":false},{"t":"Conversor de Unix Timestamp","u":"/utilidades/unix-timestamp","d":"Convierte epoch a fecha legible y al revés, con zonas horarias.","s":"utilidad","kw":"unix timestamp epoch fecha hora segundos milisegundos convertir","p":false},{"t":"Decodificar JWT","u":"/utilidades/jwt-decoder","d":"Inspecciona cabecera, payload y caducidad de un token JWT.","s":"utilidad","kw":"jwt token bearer decodificar payload claims auth caducidad","p":false},{"t":"Generador de UUID y ULID","u":"/utilidades/generador-uuid","d":"Genera identificadores únicos v4 y ULID en lote, listos para copiar.","s":"utilidad","kw":"uuid guid ulid identificador aleatorio v4 unico id","p":false},{"t":"Probar Expresiones Regulares","u":"/utilidades/regex-tester","d":"Prueba tus regex con coincidencias resaltadas y grupos de captura.","s":"utilidad","kw":"regex expresion regular probar test coincidencias grupos patron","p":false},{"t":"Generador de Hash","u":"/utilidades/generador-hash","d":"Calcula SHA-1, SHA-256, SHA-384 y SHA
198-512 de cualquier texto.","s":"utilidad","kw":"hash sha1 sha256 sha512 checksum resumen huella md5","p":false},{"t":"Interpretar Expresión Cron","u":"/utilidades/cron-parser","d":"Traduce una expresión cron a lenguaje natural y sus próximas ejecuciones.","s":"utilidad","kw":"cron crontab expresion programar tarea horario interpretar","p":false},{"t":"Decodificar Certificado X.509","u":"/utilidades/certificado-x509","d":"Lee emisor, fechas y dominios de un certificado PEM.","s":"utilidad","kw":"certificado x509 pem ssl tls caducidad emisor dominio https","p":false},{"t":"Generador de Contraseñas","u":"/utilidades/generador-contrasenas","d":"Contraseñas seguras y aleatorias con opciones de longitud y símbolos.","s":"utilidad","kw":"contrasena password segura aleatoria generar clave fuerte","p":false},{"t":"Generador de Cadenas Aleatorias","u":"/utilidades/cadena-aleatoria","d":"Cadenas al azar con el alfabeto y la longitud que necesites.","s":"utilidad","kw":"cadena aleatoria random string token generar alfabeto","p":false},{"t":"cURL a Código","u":"/utilidades/curl-a-codigo","d":"Convierte un comando cURL en fetch, Python requests o Node.","s":"utilidad","kw":"curl fetch python requests node axios convertir peticion http api","p":false},{"t":"Generador y Lector de QR","u":"/utilidades/codigo-qr","d":"Crea códigos QR descargables y lee el contenido de una imagen QR.","s":"utilidad","kw":"qr codigo generar leer escanear url wifi descargar","p":false},{"t":"Encabezados","u":"/sintaxis-markdown/encabezados","d":"Los seis niveles de título con # y la sintaxis alternativa subrayada.","s":"sintaxis","kw":"titulo h1 h2 h3 almohadilla hash cabecera"},{"t":"Saltos de línea","u":"/sintaxis-markdown/saltos-de-linea","d":"Separar párrafos y forzar un salto dentro del mismo párrafo.","s":"sintaxis","kw":"salto linea parrafo enter br espacios retorno"},{"t":"Listas","u":"/sintaxis-markdown/listas","d":"Listas ordenadas, desordenadas y anidadas sin romper la numeración.","s":"sintaxis","kw":"lista vinetas numerada ordenada anidada bullet guion"},{"t":"Citas","u":"/sintaxis-markdown/citas","d":"Bloques de cita con >, citas anidadas y citas de varios párrafos.","s":"sintaxis","kw":"cita blockquote mayor que comilla"},{"t":"Bloques de código","u":"/sintaxis-markdown/bloques-de-codigo","d":"Vallas de triple acento grave y resaltado de sintaxis por lenguaje.","s":"sintaxis","kw":"codigo bloque fence backticks acentos graves resaltado lenguaje"},{"t":"Líneas horizontales","u":"/sintaxis-markdown/lineas-horizontales","d":"Separadores con ***, --- o ___ y cuándo se confunden con un encabezado.","s":"sintaxis","kw":"linea horizontal separador regla hr guiones"},{"t":"Negrita y cursiva","u":"/sintaxis-markdown/negrita-y-cursiva","d":"Énfasis con asteriscos o guiones bajos, y por qué a veces no se aplica.","s":"sintaxis","kw":"negrita cursiva bold italic asterisco guion bajo enfasis"},{"t":"Subrayado","u":"/sintaxis-markdown/subrayado","d":"Markdown no lo tiene: cómo subrayar con HTML y por qué casi nunca conviene.","s":"sintaxis","kw":"subrayar underline u html"},{"t":"Enlaces","u":"/sintaxis-markdown/enlaces","d":"Enlaces en línea, de referencia, automáticos y anclas internas.","s":"sintaxis","kw":"enlace link url hipervinculo corchetes ancla"},{"t":"Imágenes","u":"/sintaxis-markdown/imagenes","d":"Insertar imágenes, texto alternativo, tamaño y hacerlas clicables.","s":"sintaxis","kw":"imagen foto img insertar alt exclamacion"},{"t":"Código en línea","u":"/sintaxis-markdown/codigo-en-linea","d":"Marcar código dentro de un párrafo y escapar acentos graves.","s":"sintaxis","kw":"codigo inline backtick acento grave monospace"},{"t":"Escapar caracteres","u":"/sintaxis-markdown/escapar-caracteres","d":"Mostrar *, _ o # literalmente sin que Markdown los interprete.","s":"sintaxis","kw":"escapar barra invertida backslash literal asterisco simbolo"},{"t":"Tablas","u":"/sintaxis-markdown/tablas","d":"Crear tablas, alinear columnas y qué hacer cuando el contenido es largo.","s":"sintaxis","kw":"tabla pipes barras columnas alinear celdas"},{"t":"Casillas de verificación","u":"/sintaxis-markdown/casillas-de-verificacion","d":"Listas de tareas con [ ] y [x], interactivas en GitHub y Obsidian.","s":"sintaxis","kw":"checkbox tarea todo lista comprobacion marcar"},{"t":"Tachado","u":"/sintaxis-markdown/tachado","d":"Texto tachado con doble virgulilla y su soporte real por plataforma.","s":"sintaxis","kw":"tachado strikethrough virgulilla tilde barrado"},{"t":"Abreviaciones","u":"/multimarkdown/abreviaciones","d":"Definir siglas una vez y que se expliquen solas al pasar el ratón.","s":"multimarkdown","kw":"abreviatura abbr siglas acronimo"},{"t":"Listas de definiciones","u":"/multimarkdown/listas-de-definiciones","d":"Glosarios con término y descripción, la etiqueta <dl> de HTML.","s":"multimarkdown","kw":"definicion glosario termino dl dt dd"},{"t":"Notas al pie","u":"/multimarkdown/notas-al-pie","d":"Referencias numeradas al final del documento, con enlace de ida y vuelta.","s":"multimarkdown","kw":"nota pie footnote referencia asterisco"},{"t":"Metadatos","u":"/multimarkdown/metadatos","d":"Título, autor y fecha del documento sin que salgan en el contenido.","s":"multimarkdown","kw":"metadatos frontmatter yaml cabecera titulo autor"},{"t":"Referencias cruzadas","u":"/multimarkdown/referencias-cruzadas","d":"Enlazar a una sección concreta con un identificador propio.","s":"multimarkdown","kw":"referencia cruzada ancla enlace interno seccion"},{"t":"Sintaxis de Markdown","u":"/sintaxis-markdown","d":"La chuleta completa: cada elemento con su ejemplo y su resultado.","s":"pagina","kw":"sintaxis chuleta cheatsheet guia manual aprender basico resumen tutorial"},{"t":"MultiMarkdown","u":"/multimarkdown","d":"Lo que MultiMarkdown añade al Markdown original.","s":"pagina","kw":"multimarkdown mmd extendida avanzada academico"},{"t":"Aplicaciones Markdown","u":"/aplicaciones-markdown","d":"Editores y apps comparados por plataforma, uso y precio.","s":"pagina","kw":"aplicaciones apps editores programas obsidian notion typora bear mac windows linux ios android comparativa mejor"},{"t":"Herramientas Markdown","u":"/herramientas","d":"Los conversores de Markdown del sitio, todos en un indice.","s":"pagina","kw":"herramientas conversores convert
198ir indice todas"},{"t":"Utilidades","u":"/utilidades","d":"Conversores y generadores de proposito general, en tu navegador.","s":"pagina","kw":"utilidades herramientas online gratis indice todas"},{"t":"Articulos","u":"/blog","d":"Guias y articulos sobre Markdown y escritura tecnica.","s":"pagina","kw":"blog articulos posts guias noticias leer"},{"t":"Que es un archivo .md","u":"/archivo-md","d":"Que es un fichero .md, como se abre y con que programas.","s":"pagina","kw":"md archivo fichero extension abrir que es formato"}];
199const ETIQUETAS = {"herramienta":"Herramienta","utilidad":"Utilidad","sintaxis":"Sintaxis","multimarkdown":"MultiMarkdown","pagina":"Página"};
200
201  (function () {
202    const root = document.getElementById('site-search');
203    const input = document.getElementById('site-search-input');
204    const panel = document.getElementById('site-search-panel');
205    const tips = document.getElementById('site-search-tips');
206    const results = document.getElementById('site-search-results');
207    const vacio = document.getElementById('site-search-empty');
208    const vacioQ = document.getElementById('site-search-empty-q');
209    const clear = document.getElementById('site-search-clear');
210    const kbd = document.getElementById('site-search-kbd');
211    if (!root || !input || !panel || !results) return;
212
213    const COLORES = {
214      herramienta: 'bg-blue-50 text-blue-700',
215      utilidad: 'bg-emerald-50 text-emerald-700',
216      sintaxis: 'bg-purple-50 text-purple-700',
217      multimarkdown: 'bg-indigo-50 text-indigo-700',
218      pagina: 'bg-slate-100 text-slate-600',
219    };
220
221    /** Sin tildes y en minusculas: "jpeg" y "mayúsculas" deben encontrarse igual. */
222    const norm = (s) =>
223      s.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
224
225    // El indice se normaliza una sola vez al cargar, no en cada pulsacion.
226    const ENTRIES = INDEX.map((e) => ({
227      ...e,
228      _t: norm(e.t),
229      _d: norm(e.d),
230      _kw: norm(e.kw || ''),
231    }));
232
233    const escRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
234
235    /**
236     * Puntuacion de una entrada para una consulta. Cada palabra de la consulta
237     * tiene que aparecer en algun campo (AND), asi que "comprimir imagen" no
238     * devuelve todos los "comprimir": lo que la gente espera al seguir
239     * escribiendo es que la lista se estreche.
240     *
241     * En los alias se exige que la palabra empiece en frontera: si no, buscar
242     * "word" saca el generador de contrasenas, porque "password" lo contiene.
243     */
244    function puntuar(entry, palabras) {
245      let total = 0;
246      for (const p of palabras) {
247        const pe = escRe(p);
248        const frontera = new RegExp('\\b' + pe);
249        let mejor = 0;
250        if (entry._t.startsWith(p)) mejor = 100;
251        // En una entrada principal, tener el termino en el titulo cuenta igual
252        // que tenerlo al principio. Si no, "JSON a CSV" (empieza por "json")
253        // adelanta a "Formatear y Validar JSON" para la busqueda "json", que no
254        // es lo que nadie espera. Solo iguala el nivel: no inventa puntos donde
255        // no hay coincidencia.
256        else if (frontera.test(entry._t)) mejor = entry.p ? 100 : 70;
257        else if (entry._t.includes(p)) mejor = 45;
258        else if (frontera.test(entry._kw)) mejor = 30;
259        else if (frontera.test(entry._d)) mejor = 15;
260        else if (entry._d.includes(p)) mejor = 8;
261        if (mejor === 0) return 0;
262        total += mejor;
263      }
264      // A igualdad de nivel, la principal primero, y luego el titulo mas corto:
265      // es el resultado mas directo.
266      if (entry.p) total += 12;
267      return total - entry._t.length * 0.05;
268    }
269
270    function buscar(q) {
271      const palabras = norm(q).split(/\s+/).filter(Boolean);
272      if (!palabras.length) return [];
273      const salida = [];
274      for (const e of ENTRIES) {
275        const s = puntuar(e, palabras);
276        if (s > 0) salida.push({ e, s });
277      }
278      salida.sort((a, b) => b.s - a.s);
279      return salida.slice(0, 8).map((r) => r.e);
280    }
281
282    const escapar = (s) =>
283      s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
284
285    /** Resalta en el titulo los trozos que coinciden con lo escrito. */
286    function resaltar(titulo, palabras) {
287      const n = norm(titulo);
288      const marcas = new Array(titulo.length).fill(false);
289      for (const p of palabras) {
290        let desde = 0;
291        let i;
292        while ((i = n.indexOf(p, desde)) !== -1) {
293          for (let j = i; j < i + p.length && j < marcas.length; j++) marcas[j] = true;
294          desde = i + p.length;
295        }
296      }
297      let html = '';
298      let dentro = false;
299      for (let i = 0; i < titulo.length; i++) {
300        if (marcas[i] && !dentro) { html += '<mark class="bg-blue-100 text-blue-900 rounded px-0.5">'; dentro = true; }
301        else if (!marcas[i] && dentro) { html += '</mark>'; dentro = false; }
302        html += escapar(titulo[i]);
303      }
304      if (dentro) html += '</mark>';
305      return html;
306    }
307
308    let activo = -1;
309    let items = [];
310
311    function abrir() {
312      panel.classList.remove('hidden');
313      root.dataset.open = 'true';
314      input.setAttribute('aria-expanded', 'true');
315    }
316
317    function cerrar() {
318      panel.classList.add('hidden');
319      root.dataset.open = 'false';
320      input.setAttribute('aria-expanded', 'false');
321      activo = -1;
322    }
323
324    function pintar(q) {
325      const palabras = norm(q).split(/\s+/).filter(Boolean);
326      items = buscar(q);
327      activo = -1;
328
329      if (!palabras.length) {
330        tips?.classList.remove('hidden');
331        results.classList.add('hidden');
332        vacio?.classList.add('hidden');
333        results.innerHTML = '';
334        return;
335      }
336
337      tips?.classList.add('hidden');
338
339      if (!items.length) {
340        results.classList.add('hidden');
341        results.innerHTML = '';
342        if (vacioQ) vacioQ.textContent = '"' + q.trim() + '"';
343        vacio?.classList.remove('hidden');
344        return;
345      }
346
347      vacio?.classList.add('hidden');
348      results.classList.remove('hidden');
349      results.innerHTML = items
350        .map((e, i) => {
351          const color = COLORES[e.s] || COLORES.pagina;
352          const etiqueta = ETIQUETAS[e.s] || '';
353          return (
354            '<li role="option" aria-selected="false" id="site-search-opt-' + i + '">' +
355            '<a href="' + e.u + '" data-i="' + i + '" class="flex items-start gap-3 px-4 py-2.5 no-underline hover:bg-slate-50 data-[on=true]:bg-blue-50 group">' +
356            '<span class="flex-1 min-w-0">' +
357            '<span class="block text-sm font-semibold text-slate-800 truncate">' + resaltar(e.t, palabras) + '</span>' +
358            '<span class="block text-xs text-slate-500 truncate mt-0.5">' + escapar(e.d) + '</span>' +
359            '</span>' +
360            '<span class="shrink-0 mt-0.5 px-2 py-0.5 text-[10px] font-bold uppercase tracking-wide rounded-full ' + color + '">' + etiqueta + '</span>' +
361            '</a></li>'
362          );
363        })
364        .join('');
365    }
366
367    function marcar(i) {
368      const enlaces = results.querySelectorAll('a[data-i]');
369      enlaces.forEach((a) => {
370        a.dataset.on = 'false';
371        a.parentElement?.setAttribute('aria-selected', 'false');
372      });
373      if (i >= 0 && enlaces[i]) {
374        enlaces[i].dataset.on = 'true';
375        enlaces[i].parentElement?.setAttribute('aria-selected', 'true');
376        enlaces[i].scrollIntoView({ block: 'nearest' });
377        input.setAttribute('aria-activedescendant', 'site-search-opt-' + i);
378      } else {
379        input.removeAttribute('aria-activedescendant');
380      }
381    }
382
383    /** La "x" y el atajo "/" comparten sitio: nunca se enseñan los dos. */
384    function botones(hayTexto) {
385      clear?.classList.toggle('hidden', !hayTexto);
386      if (!kbd) return;
387      kbd.classList.toggle('hidden', hayTexto);
388      kbd.classList.toggle('sm:flex', !hayTexto);
389    }
390
391    input.addEventListener('input', () => {
392      const q = input.value;
393      botones(q.length > 0);
394      pintar(q);
395      abrir();
396    });
397
398    input.addEventListener('focus', () => {
399      botones(input.value.length > 0);
400      pintar(input.value);
401      abrir();
402    });
403
404    input.addEventListener('keydown', (ev) => {
405      if (ev.key === 'ArrowDown') {
406        ev.preventDefault();
407        if (!items.length) return;
408        activo = (activo + 1) % items.length;
409        marcar(activo);
410      } else if (ev.key === 'ArrowUp') {
411        ev.preventDefault();
412        if (!items.length) return;
413        activo = activo <= 0 ? items.length - 1 : activo - 1;
414        marcar(activo);
415      } else if (ev.key === 'Enter') {
416        // Sin seleccion explicita, Enter va al primer resultado: es el gesto
417        // que ya tiene aprendido cualquiera que use un buscador.
418        const i = activo >= 0 ? activo : 0;
419        if (items[i]) {
420          ev.preventDefault();
421          window.location.href = items[i].u;
422        }
423      } else if (ev.key === 'Escape') {
424        if (input.value) {
425          input.value = '';
426          botones(false);
427          pintar('');
428        } else {
429          cerrar();
430          input.blur();
431        }
432      }
433    });
434
435    clear?.addEventListener('click', () => {
436      input.value = '';
437      botones(false);
438      pintar('');
439      input.focus();
440    });
441
442    // Las pistas rellenan el campo y buscan, en vez de navegar a ciegas.
443    tips?.querySelectorAll('button[data-tip]').forEach((b) => {
444      b.addEventListener('mousedown', (ev) => ev.preventDefault());
445      b.addEventListener('click', () => {
446        input.value = b.dataset.tip || '';
447        botones(true);
448        pintar(input.value);
449        input.focus();
450      });
451    });
452
453    document.addEventListener('click', (ev) => {
454      if (!root.contains(ev.target)) cerrar();
455    });
456
457    // "/" enfoca el buscador desde cualquier parte, salvo si ya se esta
458    // escribiendo en otro campo (las herramientas del sitio son editores).
459    document.addEventListener('keydown', (ev) => {
460      if (ev.key !== '/' || ev.metaKey || ev.ctrlKey || ev.altKey) return;
461      const t = ev.target;
462      const tag = t && t.tagName;
463      if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT' || (t && t.isContentEditable)) return;
464      ev.preventDefault();
465      input.focus();
466    });
467  })();
468})();</script>
468 <!-- Hello Bar --> <div id="hello-bar" class="fixed top-[7.75rem] left-0 right-0 z-30 bg-slate-900 text-white px-4 py-2.5 flex items-center justify-center gap-3 text-sm shadow-2xl -translate-y-full transition-transform duration-500"> <span class="text-yellow-400 text-base leading-none">★</span> <p class="text-center leading-snug">
469¿Te es útil esta web? <strong>Apóyala sin coste:</strong> si compras en Amazon, hazlo a través de
470<a href="https://www.amazon.es/?tag=markdown-21" target="_blank" rel="sponsored noopener" class="underline underline-offset-2 text-yellow-300 hover:text-yellow-200 font-semibold transition-colors">nuestro enlace de afiliado</a>
471— el precio es el mismo para ti y nos ayuda a seguir.
472</p> <button id="hello-bar-close" aria-label="Cerrar" class="ml-2 shrink-0 text-slate-400 hover:text-white transition-colors text-lg leading-none">✕</button> </div> <main class="flex-1 w-full max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12 md:py-16"> 
472<script type="module">const t=document.getElementById("open-zoom"),o=document.getElementById("zoom-modal"),c=document.getElementById("close-zoom"),e=document.getElementById("modal-img");if(t&&o&&e){t.addEventListener("click",()=>{const s=t.querySelector("img");s&&e&&(e.src=s.src,o.classList.remove("hidden"),document.body.style.overflow="hidden",setTimeout(()=>e.classList.remove("scale-95"),10))});const d=()=>{e.classList.add("scale-95"),setTimeout(()=>{o.classList.add("hidden"),document.body.style.overflow=""},200)};o.addEventListener("click",d),c&&c.addEventListener("click",d)}</script>
472 <div class="flex flex-col gap-24 pb-16"> <!-- Hero: editor en vivo --> <section class="relative pt-12 sm:pt-16 pb-4 px-0 sm:px-4"> <div class="absolute inset-0 -z-10 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-blue-100/50 via-slate-50 to-slate-50"></div> <div class="text-center mb-8"> <h1 class="text-4xl sm:text-5xl md:text-6xl font-extrabold tracking-tight text-slate-900 mb-5 max-w-4xl mx-auto leading-tight">
473Escribe <span class="text-transparent bg-clip-text bg-gradient-to-r from-blue-600 to-indigo-600">Markdown</span> y mira el resultado
474</h1> <p class="text-lg sm:text-xl text-slate-600 max-w-2xl mx-auto leading-relaxed">
475Editor online gratis, sin registro ni instalacion. Escribe a la izquierda y ve el resultado formateado a la derecha.
476</p> </div> <!-- Editor: se escapa del max-w-6xl del <main> para dar mas sitio a las dos columnas --> <div class="editor-wide"> <!-- Cada grupo cae sobre su columna: acciones de entrada a la izquierda,
477           de salida a la derecha, y el menu de herramientas en medio. --> <div class="flex flex-wrap items-center justify-center md:justify-between gap-3 mb-3"> <!-- Izquierda: sobre el textarea. flex-1 + basis-0 para que ambos laterales
478             ocupen lo mismo y el boton central quede centrado de verdad; con
479             justify-between se desplazaba hacia el grupo mas estrecho. --> <div class="flex items-center gap-2 order-1 md:flex-1 md:basis-0"> <button id="btn-sample" disabled class="px-4 py-2 text-sm font-medium text-slate-600 bg-white border border-slate-200 rounded-xl hover:bg-slate-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">Cargar ejemplo</button> <button id="btn-clear" disabled class="px-4 py-2 text-sm font-medium text-slate-600 bg-white border border-slate-200 rounded-xl hover:bg-slate-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">Limpiar</button> </div> <!-- Centro: menu de herramientas --> <div class="relative order-3 md:order-2"> <!-- Mismo degradado que "Markdown" en el H1, para que el boton se lea
480               como parte de la marca y no como un elemento suelto. --> <button id="tools-trigger" type="button" aria-haspopup="true" aria-expanded="false" aria-controls="tools-menu" class="inline-flex items-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-indigo-600 text-white text-sm font-bold rounded-xl hover:from-blue-500 hover:to-indigo-500 transition-all shadow-lg shadow-blue-600/25"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-wand-sparkles w-5 h-5 shrink-0">  <path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72"></path> <path d="m14 7 3 3"></path> <path d="M5 6v4"></path> <path d="M19 14v4"></path> <path d="M10 2v2"></path> <path d="M7 8H3"></path> <path d="M21 16h-4"></path> <path d="M11 3H9"></path>  </svg>
481Ver otras herramientas
482<svg id="tools-caret" class="w-4 h-4 shrink-0 transition-transform" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg> </button> <div id="tools-menu" hidden class="absolute z-50 left-1/2 -translate-x-1/2 mt-3 w-[min(42rem,calc(100vw-2rem))] p-3 bg-white border border-slate-200 rounded-[1.5rem] shadow-2xl shadow-slate-900/10"> <div class="grid sm:grid-cols-2 gap-2"> <a href="/herramientas/markdown-a-html" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-blue-400 hover:bg-blue-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-5 h-5 shrink-0 mt-0.5 text-blue-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Markdown → HTML</span> <span class="block text-xs text-slate-600 leading-snug">Convierte a código HTML limpio en tiempo real.</span> </span> </a><a href="/herramientas/html-a-markdown" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-u
482nderline hover:border-orange-400 hover:bg-orange-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code w-5 h-5 shrink-0 mt-0.5 text-orange-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12.5 8 15l2 2.5"></path> <path d="m14 12.5 2 2.5-2 2.5"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">HTML → Markdown</span> <span class="block text-xs text-slate-600 leading-snug">Limpia código HTML y lo convierte a Markdown portable.</span> </span> </a><a href="/herramientas/markdown-a-pdf" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-red-400 hover:bg-red-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-down w-5 h-5 shrink-0 mt-0.5 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 18v-6"></path> <path d="m9 15 3 3 3-3"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Markdown → PDF</span> <span class="block text-xs text-slate-600 leading-snug">Exporta a PDF listo para imprimir o compartir.</span> </span> </a><a href="/herramientas/pdf-a-markdown" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-red-400 hover:bg-red-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-up w-5 h-5 shrink-0 mt-0.5 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 12v6"></path> <path d="m15 15-3-3-3 3"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">PDF → Markdown</span> <span class="block text-xs text-slate-600 leading-snug">Extrae el texto de un PDF sin subirlo a ningún servidor.</span> </span> </a><a href="/herramientas/imagen-a-markdown" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-violet-400 hover:bg-violet-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scan-text w-5 h-5 shrink-0 mt-0.5 text-violet-600">  <path d="M3 7V5a2 2 0 0 1 2-2h2"></path> <path d="M17 3h2a2 2 0 0 1 2 2v2"></path> <path d="M21 17v2a2 2 0 0 1-2 2h-2"></path> <path d="M7 21H5a2 2 0 0 1-2-2v-2"></path> <path d="M7 8h8"></path> <path d="M7 12h10"></path> <path d="M7 16h6"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Imagen → Markdown (OCR)</span> <span class="block text-xs text-slate-600 leading-snug">Lee el texto de una captura o foto con OCR, sin salir de tu navegador.</span> </span> </a><a href="/herramientas/markdown-a-word" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-blue-400 hover:bg-blue-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-type-corner w-5 h-5 shrink-0 mt-0.5 text-blue-600">  <path d="M12 22h6a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v6"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M3 16v-1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V16"></path> <path d="M6 22h2"></path> <path d="M7 14v8"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Markdown → Word</span> <span class="block text-xs text-slate-600 leading-snug">Descarga un .docx real con estilos nativos de Word.</span> </span> </a><a href="/herramientas/word-a-markdown" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-u
482nderline hover:border-indigo-400 hover:bg-indigo-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-input w-5 h-5 shrink-0 mt-0.5 text-indigo-600">  <path d="M4 11V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M2 15h10"></path> <path d="m9 18 3-3-3-3"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Word → Markdown</span> <span class="block text-xs text-slate-600 leading-snug">Convierte .docx conservando encabezados, listas y tablas.</span> </span> </a><a href="/herramientas/generador-de-tablas" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-emerald-400 hover:bg-emerald-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table-2 w-5 h-5 shrink-0 mt-0.5 text-emerald-600">  <path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Generador Visual de Tablas</span> <span class="block text-xs text-slate-600 leading-snug">Editor tipo hoja de cálculo, sin escribir barras verticales.</span> </span> </a><a href="/herramientas/excel-a-markdown" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-green-400 hover:bg-green-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-spreadsheet w-5 h-5 shrink-0 mt-0.5 text-green-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M8 13h2"></path> <path d="M14 13h2"></path> <path d="M8 17h2"></path> <path d="M14 17h2"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Excel → Tabla Markdown</span> <span class="block text-xs text-slate-600 leading-snug">Sube el .xlsx o pega las celdas desde Excel o Sheets.</span> </span> </a><a href="/herramientas/markdown-a-mapa-mental" class="group flex items-start gap-3 p-3 rounded-2xl border-2 border-transparent hover:border-slate-200 transition-colors no-underline hover:border-indigo-400 hover:bg-indigo-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-brain w-5 h-5 shrink-0 mt-0.5 text-indigo-600">  <path d="M12 18V5"></path> <path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"></path> <path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"></path> <path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"></path> <path d="M18 18a4 4 0 0 0 2-7.464"></path> <path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"></path> <path d="M6 18a4 4 0 0 1-2-7.464"></path> <path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"></path>  </svg> <span class="min-w-0"> <span class="block font-bold text-sm text-slate-900">Markdown → Mapa Mental</span> <span class="block text-xs text-slate-600 leading-snug">Mapa mental interactivo descargable como PNG o SVG.</span> </span> </a> </div> <a href="/herramientas" class="mt-2 flex items-center justify-center gap-2 px-4 py-3 bg-slate-900 text-white text-sm font-bold rounded-2xl hover:bg-slate-800 transition-colors no-underline">
483Ver todas las herramientas →
484</a> </div> </div> <!-- Derecha: sobre el resultado --> <div class="flex items-center gap-2 order-2 md:order-3 md:flex-1 md:basis-0 md:justify-end"> <button id="btn-copy-html-top" disabled class="px-4 py-2 text-sm font-bold text-slate-900 bg-white border-2 border-slate-200 rounded-xl hover:border-slate-400 hover:bg-slate-50 transition-colors flex items-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed"> <svg class="w-4 h-4 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>
485Copiar HTML
486</button> <button id="btn-copy-rich-top" disabled class="px-4 py-2 text-sm font-bold text-white bg-slate-900 rounded-xl hover:bg-slate-800 transition-colors flex items-center gap-2 shadow-sm disabled:opacity-50 disabled:cursor-not-allowed"> <svg class="w-4 h-4 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect x="8" y="2" width="8" height="4" rx="1" ry="1"></rect></svg>
487Copiar texto enriquecido
488</button> </div> </div> <div class="grid md:grid-cols-2 gap-4"> <div class="flex flex-col"> <div class="px-4 py-2.5 bg-slate-800 text-slate-300 text-xs font-bold uppercase tracking-widest rounded-t-2xl">Tu Markdown</div> <textarea id="md-input" spellcheck="false" aria-label="Editor de Markdown" class="flex-1 min-h-[520px] w-full p-5 bg-slate-900 text-slate-100 font-mono text-sm leading-relaxed resize-none focus:outline-none rounded-b-2xl" placeholder="# Mi titulo
489
490Escribe tu **Markdown** aqui..."></textarea> </div> <div class="flex flex-col"> <div class="px-4 py-2.5 bg-slate-50 text-slate-600 text-xs font-bold uppercase tracking-widest rounded-t-2xl border border-b-0 border-slate-200">Resultado</div> <div id="preview" class="flex-1 min-h-[520px] p-8 bg-white border border-t-0 border-slate-200 rounded-b-2xl overflow-auto prose prose-slate max-w-none prose-headings:font-extrabold prose-a:text-blue-600 prose-img:rounded-xl"></div> </div> </div> <!-- Acciones al pie: el usuario acaba de escribir y quiere llevarse el resultado --> <div class="flex flex-col sm:flex-row items-center justify-center gap-3 mt-6"> <button id="btn-copy-html-bottom" disabled class="w-full sm:w-auto px-6 py-3.5 text-sm font-bold text-slate-900 bg-white border-2 border-slate-200 rounded-xl hover:border-slate-400 hover:bg-slate-50 transition-colors flex items-center justify-center gap-2 shadow-sm disabled:opacity-50 disabled:cursor-not-allowed"> <svg class="w-4 h-4 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>
491Copiar HTML
492</button> <button id="btn-copy-rich" disabled class="w-full sm:w-auto px-6 py-3.5 text-sm font-bold text-white bg-slate-900 rounded-xl hover:bg-slate-800 transition-colors flex items-center justify-center gap-2 shadow-sm disabled:opacity-50 disabled:cursor-not-allowed"> <svg class="w-4 h-4 shrink-0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect x="8" y="2" width="8" height="4" rx="1" ry="1"></rect></svg>
493Copiar texto enriquecido
494</button> </div> <p class="text-center text-sm text-slate-500 mt-5">
495Pega el texto enriquecido en Word, Google Docs o tu correo y conserva el formato.
496        Todo ocurre en tu navegador: tu texto no se envia a ningun servidor.
497<a href="/sintaxis-markdown" class="text-blue-600 font-semibold hover:underline">Consulta la sintaxis completa</a> </p> </div> </section> <!-- Conversores --> <section class="max-w-6xl mx-auto w-full px-4 sm:px-6"> <div class="text-center mb-10"> <h2 class="text-3xl sm:text-4xl font-extrabold tracking-tight text-slate-900 mb-4">
497Convierte tu Markdown</h2> <p class="text-lg text-slate-600 max-w-2xl mx-auto">Pasa tu texto a cualquier formato, gratis y sin registro.</p> </div> <div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-4"> <a href="/herramientas/markdown-a-html" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-blue-400 hover:bg-blue-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-code-xml w-7 h-7 mb-3 text-blue-600">  <path d="m18 16 4-4-4-4"></path> <path d="m6 8-4 4 4 4"></path> <path d="m14.5 4-5 16"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Markdown → HTML</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Convierte a código HTML limpio en tiempo real.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/html-a-markdown" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-orange-400 hover:bg-orange-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-code w-7 h-7 mb-3 text-orange-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 12.5 8 15l2 2.5"></path> <path d="m14 12.5 2 2.5-2 2.5"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">HTML → Markdown</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Limpia código HTML y lo convierte a Markdown portable.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/markdown-a-pdf" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-red-400 hover:bg-red-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-down w-7 h-7 mb-3 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 18v-6"></path> <path d="m9 15 3 3 3-3"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Markdown → PDF</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Exporta a PDF listo para imprimir o compartir.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/pdf-a-markdown" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-red-400 hover:bg-red-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-up w-7 h-7 mb-3 text-red-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M12 12v6"></path> <path d="m15 15-3-3-3 3"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">PDF → Markdown</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">
497Extrae el texto de un PDF sin subirlo a ningún servidor.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/imagen-a-markdown" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-violet-400 hover:bg-violet-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-scan-text w-7 h-7 mb-3 text-violet-600">  <path d="M3 7V5a2 2 0 0 1 2-2h2"></path> <path d="M17 3h2a2 2 0 0 1 2 2v2"></path> <path d="M21 17v2a2 2 0 0 1-2 2h-2"></path> <path d="M7 21H5a2 2 0 0 1-2-2v-2"></path> <path d="M7 8h8"></path> <path d="M7 12h10"></path> <path d="M7 16h6"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Imagen → Markdown (OCR)</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Lee el texto de una captura o foto con OCR, sin salir de tu navegador.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/markdown-a-word" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-blue-400 hover:bg-blue-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-type-corner w-7 h-7 mb-3 text-blue-600">  <path d="M12 22h6a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v6"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M3 16v-1.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 .5.5V16"></path> <path d="M6 22h2"></path> <path d="M7 14v8"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Markdown → Word</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Descarga un .docx real con estilos nativos de Word.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/word-a-markdown" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-indigo-400 hover:bg-indigo-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-input w-7 h-7 mb-3 text-indigo-600">  <path d="M4 11V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M2 15h10"></path> <path d="m9 18 3-3-3-3"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Word → Markdown</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Convierte .docx conservando encabezados, listas y tablas.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/generador-de-tablas" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-emerald-400 hover:bg-emerald-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-table-2 w-7 h-7 mb-3 text-emerald-600">  <path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Generador Visual de Tablas</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Editor tipo hoja de cálculo, sin escribir barras verticales.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/excel-a-markdown" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-green-400 hover:bg-green-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-spreadsheet w-7 h-7 mb-3 text-green-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M8 13h2"></path> <path d="M14 13h2"></path> <path d="M8 17h2"></path> <path d="M14 17h2"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Excel → Tabla Markdown</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Sube el .xlsx o pega las celdas desde Excel o Sheets.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a><a href="/herramientas/markdown-a-mapa-mental" class="group flex flex-col p-6 rounded-[1.5rem] bg-white border-2 border-slate-200 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg no-underline hover:border-indigo-400 hover:bg-indigo-50"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-brain w-7 h-7 mb-3 text-indigo-600">  <path d="M12 18V5"></path> <path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4"></path> <path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5"></path> <path d="M17.997 5.125a4 4 0 0 1 2.526 5.77"></path> <path d="M18 18a4 4 0 0 0 2-7.464"></path> <path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517"></path> <path d="M6 18a4 4 0 0 1-2-7.464"></path> <path d="M6.003 5.125a4 4 0 0 0-2.526 5.77"></path>  </svg> <h3 class="font-bold text-base text-slate-900 mb-1">Markdown → Mapa Mental</h3> <p class="text-sm text-slate-600 leading-relaxed flex-1">Mapa mental interactivo descargable como PNG o SVG.</p> <div class="mt-4 text-xs font-bold uppercase tracking-widest text-slate-400 group-hover:text-slate-600 transition-colors">Usar herramienta →</div> </a> </div> <div class="text-center mt-8"> <a href="/herramientas" class="inline-flex items-center gap-2 px-8 py-4 bg-slate-900 text-white font-medium rounded-xl hover:bg-slate-800 transition-all shadow-lg shadow-slate-900/20"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-wand-sparkles w-5 h-5">  <path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72"></path> <path d="m14 7 3 3"></path> <path d="M5 6v4"></path> <path d="M19 14v4"></path> <path d="M10 2v2"></path> <path d="M7 8H3"></path> <path d="M21 16h-4"></path> <path d="M11 3H9"></path>  </svg>
498Ver todas las herramientas
499</a> </div> </section> <!-- Qué es Markdown? Section --> <section id="que-es-markdown" class="max-w-6xl mx-auto w-full px-4 sm:px-6"> <div class="flex flex-col items-center text-center mb-12"> <div class="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-slate-200/50 text-slate-600 text-sm font-semibold tracking-wide mb-6"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-book-open w-4 h-4">  <path d="M12 7v14"></path> <path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path>  </svg> Introducción
500</div> <h2 class="text-4xl sm:text-5xl lg:text-6xl font-extrabold tracking-tight text-slate-900 mb-8">¿Qué es Markdown?</h2> <p class="text-xl sm:text-2xl font-medium text-slate-800 leading-tight max-w-4xl">
501Markdown nació en 2004 de la mano de John Gruber como herramienta de conversión de texto plano a HTML, bajo una licencia BSD.
502</p> </div> <div class="bg-white p-8 sm:p-12 rounded-[2.5rem] border border-slate-200/60 shadow-xl shadow-slate-200/20 overflow-hidden relative"> <div class="block"> <!-- Image floated to the right for "surrounded" text effect on desktop --> <div class="md:float-right md:ml-12 mb-8 md:mb-4 flex flex-col items-center group cursor-pointer w-full md:w-auto"> <button id="open-zoom" class="block relative focus:outline-none"> <img src="/diferencia-markdown-html.jpg" alt="Diferencia Markdown y HTML" class="rounded-2xl w-full max-w-md 
502shadow-lg border-4 border-white transition-transform duration-500 group-hover:scale-[1.02]"> <div class="absolute inset-0 bg-slate-900/0 group-hover:bg-slate-900/5 transition-colors rounded-2xl"></div> </button> <p class="text-center text-slate-500 text-sm mt-4 font-medium italic">Sintaxis Markdown vs Sintaxis HTML <br> <span class="text-blue-600 not-italic">(clic para ampliar)</span></p> </div> <div class="text-lg text-slate-600 leading-relaxed"> <p class="mb-6">
503Aunque se le conoce como herramienta, también se considera un <strong>método o lenguaje de escritura</strong>.
504</p> <p class="mb-6">
505Su fin es permitirte redactar contenido de manera sencilla, manteniendo un diseño legible en su código en todo momento.
506</p> <p class="mb-6">
507Haciendo uso estricto de texto plano, puedes añadir formatos como <strong>negritas</strong>, <em>cursivas</em> o <a href="https://helenizarte.com" class="text-blue-600 hover:text-blue-500 transition-colors font-medium">enlaces</a> sin distraerte usando menús o botones complicados, lo que multiplicará tu eficiencia al escribir.
508</p> <p class="mb-6">
509De cara al usuario final no hay ninguna diferencia. Esta web está escrita íntegramente en Markdown, como puedes ver, todo está perfectamente formateado.
510</p> <p>
511Los documentos se guardan con la extensión <code class="px-1.5 py-0.5 rounded bg-slate-100 text-slate-800 text-base font-mono">.md</code>. Si has llegado aquí porque te ha llegado uno y no sabes qué hacer con él, mira <a href="/archivo-md" class="text-blue-600 hover:text-blue-500 transition-colors font-medium">qué es un archivo .MD y cómo abrirlo</a>.
512</p> </div> </div> </div> <!-- Simple Modal for Zoom --> <div id="zoom-modal" class="fixed inset-0 z-[100] hidden bg-slate-950/80 backdrop-blur-sm flex items-center justify-center p-4 cursor-zoom-out"> <div class="relative max-w-5xl w-full flex items-center justify-center"> <img id="modal-img" src="" alt="Ampliado" class="max-w-full max-h-[90vh] rounded-lg shadow-2xl transition-transform duration-300 scale-95"> <button id="close-zoom" class="absolute -top-12 right-0 text-white hover:text-blue-400 transition-colors"> <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg> </button> </div> </div>  <!-- Home Ad Space 1 --> <div class="mt-12 w-full"> <div class="w-full flex justify-center my-8 min-h-[100px] sm:min-h-[90px]"> <div id="53292-1"></div> </div> </div> </section> <!-- Para qué sirve? Section --> <section class="max-w-6xl mx-auto w-full px-4 sm:px-6"> <div class="bg-white rounded-[2.5rem] p-8 sm:p-12 lg:p-16 border border-slate-200/60 shadow-xl shadow-slate-200/20 relative overflow-hidden"> <div class="absolute top-0 right-0 -mt-20 -mr-20 w-80 h-80 bg-blue-50 rounded-full blur-3xl op
512acity-50 pointer-events-none"></div> <div class="text-center mb-16 relative z-10"> <h2 class="text-3xl sm:text-4xl font-extrabold tracking-tight text-slate-900 mb-4">¿Para qué sirve?</h2> <p class="text-lg text-slate-600 max-w-2xl mx-auto">Su increíble simplificación y adopción lo han convertido en la navaja suiza para publicar contenido en cualquier rincón de la red.</p> </div> <div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-10 relative z-10"> <div class="flex flex-col items-center text-center group"> <div class="w-16 h-16 bg-blue-50/80 rounded-2xl flex items-center justify-center mb-5 group-hover:bg-blue-600 group-hover:-translate-y-1 transition-all duration-300"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-globe w-8 h-8 text-blue-600 group-hover:text-white transition-colors duration-300">  <circle cx="12" cy="12" r="10"></circle> <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path> <path d="M2 12h20"></path>  </svg> </div> <h3 class="font-bold text-slate-900 mb-2 text-lg">Publica online</h3> <p class="text-sm text-slate-600 leading-relaxed">Perfecto para blogs (WordPress, Ghost). El <a href="/herramientas/markdown-a-html" class="text-blue-600 font-semibold hover:underline">HTML resultante</a> nunca ha sido tan limpio.</p> </div> <div class="flex flex-col items-center text-center group"> <div class="w-16 h-16 bg-indigo-50/80 rounded-2xl flex items-center justify-center mb-5 group-hover:bg-indigo-600 group-hover:-translate-y-1 transition-all duration-300"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-layers w-8 h-8 text-indigo-600 group-hover:text-white transition-colors duration-300">  <path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path> <path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path> <path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path>  </svg> </div> <h3 class="font-bold text-slate-900 mb-2 text-lg">Escribe en foros</h3> <p class="text-sm text-slate-600 leading-relaxed">Lugares modernos como Trello, Slack o StackOverflow soportan este lenguaje nativamente.</p> </div> <div class="flex flex-col items-center text-center group"> <div class="w-16 h-16 bg-emerald-50/80 rounded-2xl flex items-center justify-center mb-5 group-hover:bg-emerald-600 group-hover:-translate-y-1 transition-all duration-300"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-smartphone w-8 h-8 text-emerald-600 group-hover:text-white transition-colors duration-300">  <rect width="14" height="20" x="5" y="2" rx="2" ry="2"></rect> <path d="M12 18h.01"></path>  </svg> </div> <h3 class="font-bold text-slate-900 mb-2 text-lg">Toma notas</h3> <p class="text-sm text-slate-600 leading-relaxed">Toma apuntes en clases o reuniones ágilmente usando tu móvil, gracias a la amplia variedad de <a href="/aplicaciones-markdown" class="text-emerald-600 font-semibold hover:underline">aplicaciones</a>.</p> </div> <div class="flex flex-col items-center text-center group"> <div class="w-16 h-16 bg-purple-50/80 rounded-2xl flex items-center justify-center mb-5 group-hover:bg-purple-600 group-hover:-translate-y-1 transition-all duration-300"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-book w-8 h-8 text-purple-600 group-hover:text-white transition-colors duration-300">  <path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20"></path>  </svg> </div> <h3 class="font-bold text-slate-900 mb-2 text-lg">Escribe libros</h3> <p class="text-sm text-slate-600 leading-relaxed">Escribe un libro entero en texto plano y expórtalo a ePub o PDF.</p> </div> </div> </div> </section> <!-- Por qué elegir Markdown Section (Merged Design) --> <section class="max-w-6xl mx-auto w-full px-4 sm:px-6"> <div class="text-center mb-16"> <div class="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-blue-100/50 text-blue-700 text-sm font-semibold tracking-wide mb-4">
513Ventajas
514</div> <h2 class="text-3xl sm:text-4xl font-extrabold tracking-tight text-slate-900 mb-6">¿Por qué elegir Markdown?</h2> <p class="text-lg text-slate-600 max-w-2xl mx-auto leading-relaxed">
515Una manera infalible de mantener todo tu contenido siempre accesible, garantizando compatibilidad total y facilidad de uso sin depender de lenguajes complejos.
516</p> </div> <div class="grid md:grid-cols-2 gap-8 mb-8"> <div class="bg-white rounded-[2rem] p-8 border border-slate-200/60 shadow-sm hover:shadow-xl hover:shadow-blue-900/5 hover:-translate-y-1 transition-all duration-300 group"> <div class="w-14 h-14 bg-blue-50/80 rounded-xl flex items-center justify-center mb-6 group-hover:bg-blue-100 group-hover:scale-110 transition-all"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-file-text w-6 h-6 text-blue-600">  <path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path> <path d="M14 2v5a1 1 0 0 0 1 1h5"></path> <path d="M10 9H8"></path> <path d="M16 13H8"></path> <path d="M16 17H8"></path>  </svg> </div> <h3 class="text-xl font-bold text-slate-900 mb-4">A prueba del futuro</h3> <p class="text-slate-600 leading-relaxed">Si procesadores como Word desapareciesen, perderías tus archivos en formato pesado. Estando basado en formato de texto plano universal, Markdown siempre será legible en cualquier ordena
516dors de cualquier época.</p> </div> <div class="bg-white rounded-[2rem] p-8 border border-slate-200/60 shadow-sm hover:shadow-xl hover:shadow-indigo-900/5 hover:-translate-y-1 transition-all duration-300 group"> <div class="w-14 h-14 bg-indigo-50/80 rounded-xl flex items-center justify-center mb-6 group-hover:bg-indigo-100 group-hover:scale-110 transition-all"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-circle-check w-6 h-6 text-indigo-600">  <circle cx="12" cy="12" r="10"></circle> <path d="m9 12 2 2 4-4"></path>  </svg> </div> <h3 class="text-xl font-bold text-slate-900 mb-4">Texto plano + Estilo</h3> <p class="text-slate-600 leading-relaxed">El problema del texto plano tradicional es no poder añadirle <strong>negritas</strong> o enlaces. Markdown soluciona esto dotándolo de una sintaxis inmensamente sencilla que se compila limpiamente para los navegadores sin entorpecerte.</p> </div> </div> <div class="w-full"> <div class="bg-white rounded-[2rem] p-8 border border-slate-200/60 shadow-sm hover:shadow-xl hover:shadow-purple-900/5 hover:-translate-y-1 transition-all duration-300 group flex flex-col sm:flex-row items-start sm:items-center gap-8"> <div class="shrink-0 w-16 h-16 bg-purple-50/80 rounded-2xl flex items-center justify-center group-hover:bg-purple-100 group-hover:scale-110 transition-all"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-square-terminal w-8 h-8 text-purple-600">  <path d="m7 11 2-2-2-2"></path> <path d="M11 13h4"></path> <rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect>  </svg> </div> <div> <h3 class="text-2xl font-bold text-slate-900 mb-3">100% Multiplataforma</h3> <p class="text-slate-600 leading-relaxed text-lg">Da igual si usas Windows, un Mac, o estás en tu iPad o smartphone Android. Este ecosistema está rodeado de maravillosas <a href="/aplicaciones-markdown" class="text-purple-600 hover:underline">aplicaciones creadas específicamente</a> para editar este simple contenido en todas partes.</p> </div> </div> </div> </section> <!-- Home Ad Space 2 --> <div class="max-w-6xl mx-auto w-full px-4 sm:px-6 pb-4"> <div class="w-full flex justify-center my-8 min-h-[100px] sm:min-h-[90px]"> <div id="53292-1"></div> </div> </div> <!-- CTAs Banner --> <section class="max-w-6xl mx-auto w-full px-4 sm:px-6 pb-20"> <div class="w-full bg-slate-900 rounded-[2.5rem] p-8 sm:p-12 lg:p-16 overflow-hidden relative shadow-2xl"> <div class="absolute top-0 right-0 w-96 h-96 bg-blue-600 rounded-full blur-[100px] opacity-30 -mr-20 -mt-20"></div> <div class="absolute bottom-0 left-0 w-80 h-80 bg-indigo-600 rounded-full blur-[80px] opacity-20 -ml-20 -mb-20"></div> <div class="relative z-10 flex flex-col items-center text-center gap-10"> <div class="max-w-3xl mx-auto"> <h2 class="text-4xl sm:text-5xl font-extrabold tracking-tight text-white mb-6 leading-tight">Empieza a incorporar Markdown en tu rutina</h2> <p class="text-slate-300 text-xl md:text-2xl leading-relaxed">Domina su escritura en cinco minutos o descubre las mejores aplicaciones para sacarle el máximo partido.</p> </div> <div class="flex flex-col sm:flex-row gap-6 w-full sm:w-auto justify-center flex-wrap"> <a href="/sintaxis-markdown" class="px-10 py-5 bg-slate-800 text-white border border-slate-700 font-bold text-lg rounded-2xl hover:bg-slate-700 hover:-translate-y-1 transition-all">
517Aprender Sintaxis
518</a> <a href="/aplicaciones-markdown" class="px-10 py-5 bg-slate-800 text-white border border-slate-700 font-bold text-lg rounded-2xl hover:bg-slate-700 hover:-translate-y-1 transition-all">
519Ver Aplicaciones
520</a> <a href="/herramientas" class="px-10 py-5 bg-slate-800 text-white border border-slate-700 font-bold text-lg rounded-2xl hover:bg-slate-700 hover:-translate-y-1 transition-all">
521Herramientas Online
522</a> </div> </div> </div> </section> </div>  </main> <footer class="bg-slate-50 border-t border-slate-200 mt-24">
522 <!-- Main footer: useful links --> <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12"> <div class="grid grid-cols-2 sm:grid-cols-4 gap-8"> <div> <p class="text-xs font-bold text-slate-400 uppercase tracking-widest mb-3">Aprender</p> <ul class="flex flex-col gap-2"> <li><a href="/sintaxis-markdown" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Sintaxis Markdown</a></li> <li><a href="/multimarkdown" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">MultiMarkdown</a></li> <li><a href="/blog" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Artículos</a></li> </ul> </div> <div> <p class="text-xs font-bold text-slate-400 uppercase tracking-widest mb-3">Herramientas</p> <ul class="flex flex-col gap-2"> <li><a href="/herramientas/markdown-a-html" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Markdown → HTML</a></li> <li><a href="/herramientas/markdown-a-pdf" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Markdown → PDF</a></li> <li><a href="/herramientas/pdf-a-markdown" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">PDF → Markdown</a></li> <li><a href="/herramientas/markdown-a-word" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Markdown → Word</a></li> <li><a href="/herramientas/generador-de-tablas" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Generador de tablas</a></li> <li><a href="/herramientas" class="text-sm text-blue-600 hover:text-blue-500 transition-colors font-medium">Ver todas →</a></li> </ul> </div> <div> <p class="text-xs font-bold text-slate-400 uppercase tracking-widest mb-3">Aplicaciones</p> <ul class="flex flex-col gap-2"> <li><a href="/aplicaciones-markdown/mac/" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Apps para Mac</a></li> <li><a href="/aplicaciones-markdown/windows/" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Apps para Windows</a></li> <li><a href="/aplicaciones-markdown/gratis/" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Apps Gratuitas</a></li> <li><a href="/aplicaciones-markdown" class="text-sm text-blue-600 hover:text-blue-500 transition-colors font-medium">Ver directorio →</a></li> </ul> </div> <div> <p class="text-xs font-bold text-slate-400 uppercase tracking-widest mb-3">Acerca de</p> <ul class="flex flex-col gap-2"> <li><a href="/javier-cristobal" class="text-sm text-slate-600 hover:text-blue-600 transition-colors">Sobre mí</a></li> </ul> </div> </div> </div> <!-- Bottom bar: legal --> <div class="border-t border-slate-200 bg-white"> <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-4 flex flex-col sm:flex-row items-center justify-between gap-3"> <div class="flex flex-col sm:flex-row items-center gap-2"> <div class="flex items-center gap-2"> <img src="/Markdown-logo.png" alt="Markdown.es Logo" class="h-5 w-5 object-contain opacity-40 grayscale"> <span class="text-slate-400 text-xs">© 2026 Markdown.es</span> </div> <span class="hidden sm:inline text-slate-200">·</span> <span class="text-slate-400 text-xs">Participante en el Programa de Afiliados de Amazon EU. Obtengo comisiones por compras realizadas a través de mis enlaces.</span> </div> <div class="flex flex-wrap justify-center gap-x-5 gap-y-1"> <a href="/aviso-legal" class="text-slate-400 hover:text-slate-600 transition-colors text-xs">Aviso Legal</a> <a href="/politica-de-privacidad" class="text-slate-400 hover:text-slate-600 transition-colors text-xs">Privacidad</a> <a href="/politica-de-cookies" class="text-slate-400 hover:text-slate-600 transition-colors text-xs">Cookies</a> </div> </div> </div> </footer> <!-- Back to Top Button --> <button id="back-to-top" class="fixed bottom-6 right-6 p-4 bg-slate-900 text-white rounded-full shadow-xl hover:bg-blue-600 hover:-translate-y-1 transition-all opacity-0 translate-y-10 focus:outline-none focus:ring-4 focus:ring-blue-300 z-50 pointer-events-none data-[visible=true]:opacity-100 data-[visible=true]:translate-y-0 data-[visible=true]:pointer-events-auto"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-arrow-up w-6 h-6">  <path d="m5 12 7-7 7 7"></path> <path d="M12 19V5"></path>  </svg> <span class="sr-only">Volver arriba</span> </button> 
522<script type="module">const e=document.getElementById("hello-bar"),l=document.getElementById("hello-bar-close");e&&!localStorage.getItem("hellobar-dismissed")&&(setTimeout(()=>e.classList.remove("-translate-y-full"),2e3),l?.addEventListener("click",()=>{e.classList.add("-translate-y-full"),localStorage.setItem("hellobar-dismissed","1")}));</script>
522 
522<script type="module">const t=document.getElementById("back-to-top");if(t){const e=()=>{window.scrollY>400?t.setAttribute("data-visible","true"):t.setAttribute("data-visible","false")};window.addEventListener("scroll",e,{passive:!0}),t.addEventListener("click",()=>{window.scrollTo({top:0,behavior:"smooth"})})}</script>
522 
522<script defer src="https://ads.themoneytizer.com/s/gen.js?type=1"></script>
522<script defer src="https://ads.themoneytizer.com/s/requestform.js?siteId=53292&#38;formatId=1"></script>
522   </body></html> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tailwindcss/[email protected]/dist/typography.min.css"> 
522<script type="module">const b=`# Hola, esto es Markdown
523
524Escribe **negrita**, *cursiva* o [enlaces](https://markdown.es) sin tocar un solo boton.
525
526## Listas
527
528- Primer elemento
529- Segundo elemento
530  - Anidado
5311. Numerada
5322. Y sigue
533
534## Tarea pendiente
535
536- [x] Aprender la sintaxis
537- [ ] Convertir a PDF
538
539## Codigo
540
541\`\`\`javascript
542const saludo = () => console.log("Hola Markdown");
543\`\`\`
544
545## Tabla
546
547| App | Plataforma | Precio |
548|-----|-----------|--------|
549| Obsidian | Multi | Gratis |
550| Typora | Multi | 14,99 $ |
551
552> Lo simple es lo que mejor envejece.
553
554---
555
556Prueba a editar este texto y mira como cambia el resultado.`;function T(){return new Promise(n=>{const t=document.createElement("script");t.src="https://cdn.jsdelivr.net/npm/[email protected]/marked.min.js",t.onload=()=>n(),document.head.appendChild(t)})}async function g(){const n=document.getElementById("md-input"),t=document.getElementById("preview"),s=document.getElementById("btn-clear"),l=document.getElementById("btn-sample"),i=document.getElementById("btn-copy-rich"),r=document.getElementById("btn-copy-html-bottom"),c=document.getElementById("btn-copy-rich-top"),d=document.getElementById("btn-copy-html-top");if(!n||!t)return;await T();const m=window.marked;m.setOptions({breaks:!0,gfm:!0});const a=()=>{t.innerHTML=m.parse(n.value||"")};n.addEventListener("input",a),s?.addEventListener("click",()=>{n.value="",a(),n.focus()}),l?.addEventListener("click",()=>{n.value=b,a()});const o=(e,y)=>{e.dataset.original===void 0&&(e.dataset.original=e.innerHTML);const v=[...e.childNodes].find(E=>E.nodeType===Node.TEXT_NODE&&E.textContent.trim());v?v.textContent=` ${y} `:e.textContent=y,setTimeout(()=>{e.innerHTML=e.dataset.original},2e3)},p=async e=>{try{await navigator.clipboard.writeText(t.innerHTML),o(e,"HTML copiado")}catch{o(e,"No se pudo copiar")}},u=async e=>{try{await navigator.clipboard.write([new ClipboardItem({"text/html":new Blob([t.innerHTML],{type:"text/html"}),"text/plain":new Blob([t.innerText],{type:"text/plain"})})]),o(e,"Copiado con formato")}catch{try{await navigator.clipboard.writeText(t.innerText),o(e,"Copiado como texto plano")}catch{o(e,"No se pudo copiar")}}};r?.addEventListener("click",()=>p(r)),i?.addEventListener("click",()=>u(i)),d?.addEventListener("click",()=>p(d)),c?.addEventListener("click",()=>u(c)),n.value=b,a(),[s,l,i,r,c,d].forEach(e=>e?.removeAttribute("disabled"))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",g):g();</script>
556 
556<script type="module">function o(){const n=document.getElementById("tools-trigger"),t=document.getElementById("tools-menu"),i=document.getElementById("tools-caret");if(!n||!t)return;const d=e=>{t.hidden=!e,n.setAttribute("aria-expanded",String(e)),i?.classList.toggle("rotate-180",e)};n.addEventListener("click",e=>{e.stopPropagation(),d(t.hidden)}),document.addEventListener("click",e=>{!t.hidden&&!t.contains(e.target)&&e.target!==n&&d(!1)}),document.addEventListener("keydown",e=>{e.key==="Escape"&&!t.hidden&&(d(!1),n.focus())}),t.addEventListener("focusout",()=>{setTimeout(()=>{!t.contains(document.activeElement)&&document.activeElement!==n&&d(!1)},0)})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",o):o();</script>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.