1<!doctype html> 2<html lang="es" prefix="og: http://ogp.me/ns#"> 3 4<head> 5 <!-- ============================================================ 1. PRECONEXIONES â siempre lo primero, ganan ms gratis ============================================================ --> 6 <link rel="dns-prefetch" href="https://www.googletagmanager.com"> 7 <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin> 8 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 9 <link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin> 10 <link rel="preconnect" href="https://pagead2.googlesyndication.com" crossorigin> 11 12 <!-- ============================================================ 1.b. GOOGLE ADSENSE â script global en <head> (obligatorio para Auto Ads: barras laterales, ancla, viñeta) ============================================================ --> 13 <meta name="google-adsense-account" content="ca-pub-9372321778320530"> 14 15 16 <!-- ============================================================ 2. CÃLCULO DE VARIABLES PHP (debe ir ANTES del
16<script> que las usa, ese era el bug de "autoplay is not defined") ============================================================ --> 17 18 19 <style> 20 /* Los iframes de los anuncios respetan el ancho del contenedor 21 (evita scroll horizontal en móvil por creativos demasiado anchos). 22 NO limitamos la altura â dejamos que el anuncio crezca lo que necesite. */ 23 div[id^="qll-"] iframe { 24 max-width: 100% !important; 25 } 26 .publicidad iframe { 27 max-width: 100% !important; 28 } 29 .publicidad { 30 max-width: 100%; 31 } 32 33 /* ============================================================ 34 CABECERA RESPONSIVE (mobile) 35 El input del buscador tiene width:350px inline, que en pantallas 36 <=767px empuja el link "Búsqueda avanzada" fuera del viewport y 37 queda tapado por el banner superior. Fix: input al 100% y el 38 link "Búsqueda avanzada" a una lÃnea propia debajo, centrado. 39 ============================================================ */ 40 /* ============================================================ 41 CARRUSEL DE PORTADAS (mobile) â tamaño uniforme 42 En desktop ya se ve bien. En mobile las portadas tienen alturas 43 distintas porque cada libro tiene aspect ratio diferente. Este CSS 44 fuerza un contenedor 2:3 (proporción libro) y usa object-fit:contain 45 para que la portada quepa entera SIN recortar. Si no es 2:3, quedan 46 márgenes discretos con fondo gris muy claro. 47 ============================================================ */ 48 @media (max-width: 991px) { 49 /* Contenedor con ancho y altura fijos â TODAS las tarjetas del 50 mismo tamaño. La portada se ESTIRA para llenar el contenedor 51 (object-fit: fill). En imágenes pequeñas la deformación es 52 imperceptible y el resultado visual queda simétrico. */ 53 .carousel .item .preview { 54 position: relative; 55 width: 100%; 56 max-width: 160px; 57 margin: 0 auto; 58 aspect-ratio: 2 / 3; 59 background: transparent !important; 60 border: 0 !important; 61 box-shadow: none !important; 62 overflow: hidden; 63 } 64 .carousel .item .preview a { 65 display: block; 66 width: 100%; 67 height: 100%; 68 background: transparent; 69 } 70 .carousel .item .preview img { 71 display: block; 72 width: 100% !important; 73 height: 100% !important; 74 max-width: 100%; 75 max-height: 100%; 76 object-fit: fill; /* se estira para cubrir el 100% del contenedor */ 77 border: 0 !important; 78 box-shadow: none !important; 79 } 80 } 81 82 @media (max-width: 767px) { 83 /* .widgets como grid flex con wrap: input + hamburguesa arriba, 84 "Búsqueda avanzada" abajo como enlace discreto. */ 85 header .widgets { 86 display: flex !important; 87 flex-wrap: wrap; 88 align-items: center; 89 gap: 8px; 90 width: 100%; 91 } 92 /* Input: ocupa TODO el espacio disponible en la primera lÃnea. */ 93 header .widgets #buscador_superior { 94 order: 1; 95 flex: 1 1 auto; 96 min-width: 0; /* clave para que flex-shrink funcione */ 97 width: auto; 98 } 99 header .widgets #buscador_superior form { display: block; width: 100%; } 100 header .widgets #buscador_superior input[type="search"] { 101 width: 100% !important; 102 max-width: 100%; 103 box-sizing: border-box; 104 } 105 /* Botón hamburguesa al lado del input, tamaño automático. */ 106 header .widgets #openmenu { 107 order: 2; 108 flex: 0 0 auto; 109 } 110 /* "Búsqueda avanzada" a lÃnea propia, alineado a la derecha, 111 texto pequeño para no dominar. */ 112 header .widgets .links { 113 order: 3; 114 flex: 1 1 100%; 115 display: block; 116 width: 100%; 117 text-align: right; 118 margin: 4px 0 0; 119 font-size: 13px; 120 } 121 header .widgets .links a { 122 display: inline-block; 123 padding: 2px 4px; 124 color: #666; 125 text-decoration: none; 126 } 127 /* Ocultamos el resultado dropdown mientras esté colocado en absoluto 128 (por si aparece en el flow) */ 129 header .widgets #resultado_buscador_superior { 130 order: 4; 131 flex: 1 1 100%; 132 } 133 /* Un poco de aire entre el header y el banner superior */ 134 .banner-superior { margin-top: 8px; } 135 } 136 137 /* ============================================================ 138 BANNER SUPERIOR (qll_top) â TAMAÃO FIJO estilo leaderboard 139 Nunca crece más de 100px de alto para no romper la cabecera. 140 ============================================================ */ 141 .banner-superior.banner-top-fixed { 142 max-height: 100px; 143 overflow: hidden; 144 text-align: center; 145 } 146 .banner-superior.banner-top-fixed #qll-top { 147 display: inline-block; 148 max-width: 100%; 149 max-height: 100px; 150 overflow: hidden; 151 line-height: 0; 152 } 153 .banner-superior.banner-top-fixed #qll-top iframe { 154 max-width: 100% !important; 155 max-height: 100px !important; 156 display: block; 157 margin: 0 auto; 158 } 159
160 /* Slots FLEXIBLES: se centran y el creativo se escala si es más ancho. 161 Se aplica a cualquier contenedor con clase .qll-flex (in-read, home, in-feed). 162 163 ANCHO: garantizado por JS (fitSlotToContainer) â nunca se sale 164 del contenedor. Si el creativo es 970px y el hueco es 800px, 165 se aplica transform:scale(0.82) y el anuncio se ve entero. 166 ALTO: libre â el iframe crece a la altura del creativo servido 167 (o al alto escalado si se ha reducido). Se ve completo. */ 168 .qll-flex { 169 display: block; 170 margin: 20px auto; 171 padding: 0; 172 width: 100%; 173 max-width: 100%; 174 overflow: hidden; /* red de seguridad â evita scroll horizontal */ 175 text-align: center; 176 box-sizing: border-box; 177 } 178 .qll-flex > .container, 179 .qll-flex > .wrapper, 180 .qll-flex > .container > .wrapper { 181 width: 100%; 182 max-width: 100%; 183 text-align: center; 184 box-sizing: border-box; 185 /* No overflow:hidden aquà â dejamos que el iframe muestre su alto real */ 186 } 187 .qll-flex div[id^="qll-"] { 188 display: block; 189 width: auto; /* JS ajusta a containerW cuando escale */ 190 max-width: 100%; 191 margin: 0 auto; 192 text-align: center; 193 line-height: 0; 194 box-sizing: border-box; 195 /* JS puede añadir overflow:hidden + width/height si aplica scale */ 196 } 197 .qll-flex div[id^="qll-"] iframe { 198 display: block; 199 max-width: 100% !important; /* fallback si JS no aplicara scale */ 200 margin: 0 auto; 201 border: 0; 202 box-sizing: border-box; 203 /* JS aplica transform:scale(N) cuando el iframe excede el ancho */ 204 } 205 206 /* ============================================================ 207 RED DE SEGURIDAD PARA AUTO ADS DE ADSENSE 208 Estos formatos deberÃan estar desactivados en AdSense, 209 pero por si Google los aplica igualmente, los limitamos aquÃ. 210 ============================================================ */ 211 212 /* 1. SIDE RAILS (barras laterales fijas) â SIEMPRE OCULTOS. 213 El usuario NO quiere que aparezcan estos anuncios verticales 214 flotantes en los laterales de la pantalla ("Noticias hace 13 min", etc.). */ 215 body > ins.google-auto-placed[data-google-container-id][style*="position: fixed"][style*="left"]:not([style*="bottom: 0"]), 216 body > ins.google-auto-placed[data-google-container-id][style*="position: fixed"][style*="right"]:not([style*="bottom: 0"]), 217 body > div[id^="google_ads_iframe_"][style*="position: fixed"][style*="left"]:not([style*="bottom: 0"]), 218 body > div[id^="google_ads_iframe_"][style*="position: fixed"][style*="right"]:not([style*="bottom: 0"]), 219 /* Selectores adicionales para side rails que Google renombra */ 220 body > div.side-rail-container, 221 body > div[class*="side-rail"], 222 body > div[class*="sidebar-ad"] { 223 display: none !important; 224 visibility: hidden !important; 225 } 226 227 /* 2. VIGNETTE (anuncios pantalla completa que aparecen entre navegación) â 228 SIEMPRE OCULTOS. El usuario no quiere ese formato que interrumpe. */ 229 body > ins.google-auto-placed[data-vignette-loaded], 230 body > div[class*="vignette"][style*="position: fixed"], 231 body > div[id*="vignette"], 232 body > ins[data-vignette], 233 /* La "Plataforma virtual 360" que aparece flotante en la parte central */ 234 body > div[id^="google_ads_iframe_"][style*="position: fixed"][style*="transform"]:not([style*="bottom: 0"]) { 235 display: none !important; 236 visibility: hidden !important; 237 } 238 239 /* 3. OVERLAYS / VÃDEO OUT-STREAM en posición flotante: 240 los OCULTAMOS por completo. El único formato flotante aceptable 241 es el ANCLA DEL PIE (bottom:0), que se salva por :not([style*="bottom: 0"]). */ 242 body > ins.adsbygoogle[data-anchor-shown]:not([data-anchor-status="displayed"]), 243 body > ins.google-auto-placed[data-google-container-id][style*="position: fixed"][style*="top:"]:not([style*="bottom: 0"]), 244 body > ins.google-auto-placed[data-vignette-loaded], 245 body > div[id*="google_esf"][style*="position: fixed"], 246 body > div[id^="google_ads_iframe_"][style*="position: fixed"][style*="top:"]:not([style*="bottom: 0"]), 247 /* Nuevo: iframes de vÃdeo out-stream flotantes en la esquina */ 248 body > iframe[id^="google_ads_iframe_"][style*="position: fixed"]:not([style*="bottom: 0"]), 249 body > iframe[src*="doubleclick"][style*="position: fixed"]:not([style*="bottom: 0"]) { 250 display: none !important; 251 visibility: hidden !important; 252 } 253 254 /* 4. Botón de cerrar SIEMPRE por encima y clickable. */ 255 body > ins[data-google-container-id] button[aria-label*="errar"], 256 body > ins[data-google-container-id] button[aria-label*="lose"], 257 body > div[id^="google_ads_iframe_"] button[aria-label*="errar"], 258 body > div[id^="google_ads_iframe_"] button[aria-label*="lose"] { 259 z-index: 2147483647 !important; 260 pointer-events: auto !important; 261 } 262 263 /* 5. Todo el body respeta el overflow â evitamos scroll horizontal 264 aunque un anuncio flotante intente estirarse fuera. */ 265 body { overflow-x: hidden; } 266 </style> 267 268 269
269<script> 270 (function () { 271 var w = window, n = navigator, blocked = false; 272 try { 273 // Huellas tÃpicas de headless / automatización 274 if (n.webdriver === true) blocked = true; 275 if (w._phantom || w.callPhantom) blocked = true; 276 if (w.__nightmare || w.Buffer) blocked = true; 277 if (w.domAutomation || w.domAutomationController) blocked = true; 278 // Selenium / WebDriver globals 279 if (w.document && w.document.$cdc_asdjflasutopfhvcZLmcfl_) blocked = true; 280 if (w.document && w.document.__webdriver_evaluate) blocked = true; 281 // Puppeteer / Playwright pattern 282 if (/HeadlessChrome/i.test(n.userAgent)) blocked = true; 283 // Chrome real siempre tiene idiomas y plugins definidos 284 if (n.languages && n.languages.length === 0) blocked = true; 285 // Timezone extraña combinada con navegador (opcional, comentado) 286 // if (Intl.DateTimeFormat().resolvedOptions().timeZone === 'UTC') blocked = true; 287 } catch (e) { /* ignora */ } 288 w.__adsBlocked = blocked; 289 })(); 290 </script>
290 291
291<script> 292 // Solo cargamos AdSense + GAM + APS si el filtro cliente lo permite. 293 if (!window.__adsBlocked) { 294 // Stub de QLLAds â permite que los blades hijos registren slots 295 // aunque qll-ads.js aún no haya cargado (patrón googletag.cmd.push). 296 window.QLLAds = window.QLLAds || { 297 _pending: [], 298 slot: function (cfg) { this._pending.push(cfg); } 299 }; 300 301 // 1) AdSense (para Auto Ads: barras laterales, ancla, viñeta) 302 var ads = document.createElement('script'); 303 ads.async = true; 304 ads.crossOrigin = 'anonymous'; 305 ads.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9372321778320530'; 306 document.head.appendChild(ads); 307 308 // 2) Wrapper QLLAds â orquesta GAM + Amazon TAM (+ Prebid en fase 3) 309 var qll = document.createElement('script'); 310 qll.async = true; 311 qll.src = 'https://quelibroleo.com/js/ads/qll-ads.js?v=5'; 312 document.head.appendChild(qll); 313 } 314 </script>
314 315 316 317 <!-- ============================================================ 3. META TAGS BÃSICOS ============================================================ --> 318 <meta charset="UTF-8"> 319 <meta name="viewport" content="width=device-width, initial-scale=1"> 320 <meta name="csrf-token" content="d4fHaNKW3MMbbYJdb3jiZh7Aqjt5tDAMnJNvu9CD"> 321 <meta name="referrer" content="no-referrer-when-downgrade"> 322 <meta name="google-site-verification" content="ku07Z9Chq2WxboXEtforOBJgwLhB8N2cFPLvoRTP2k4" /> 323 324 <title>Quelibroleo - Descubre tu próxima lectura - Red social de libros</title> 325 <meta name="title" content="Quelibroleo - Descubre tu próxima lectura - Red social de libros"> 326 <meta name="description" content="Ãnete a nuestra comunidad de lectores en Quelibroleo. Descubre, califica y comparte tus lecturas favoritas con otros apasionados de los libros."> 327 328 <!-- OG / Twitter --> 329 <meta property="og:title" content="Quelibroleo - Descubre tu próxima lectura - Red social de libros"> 330 <meta property="og:description" content="Quelibroleo es una comunidad de libros y lectores donde puedes votar y comentar los libros leÃdos."> 331 <meta property="og:image" content="https://quelibroleo.com/images/logo.jpg"> 332 <meta property="og:url" content="https://quelibroleo.com/buscador-avanzado"> 333 <meta name="twitter:card" content="summary_large_image"> 334 <meta name="twitter:title" content="Quelibroleo - Descubre tu próxima lectura - Red social de libros"> 335 <meta name="twitter:description" content="Quelibroleo es una comunidad de libros y lectores."> 336 <meta name="twitter:image" content="https://quelibroleo.com/images/twitter-card.jpg"> 337 338 339 <!-- ============================================================ 4. CANONICAL + FAVICON ============================================================ --> 340 <link rel="canonical" href="https://quelibroleo.com/buscador-avanzado" /> 341 <link rel="shortcut icon" href="https://quelibroleo.com/favicon.ico" /> 342 <link rel="stylesheet" href="https://quelibroleo.com/css/jquery.tagsinput.min.css"> 343 344 <!-- ============================================================ 5. CSS CRÃTICO â bloquea el render pero es imprescindible (bootstrap + tus estilos propios, no los de terceros) ============================================================ --> 345 <link rel="stylesheet" href="https://quelibroleo.com/css/normalize.min.css"> 346 <link rel="stylesheet" href="https://quelibroleo.com/css/bootstrap.min.css"> 347 348 <link rel="stylesheet" href="https://quelibroleo.com/css/style.css?v=1782993719"> 349 <link rel="stylesheet" href="https://quelibroleo.com/css/style_max.css?v=1727427582"> 350 351 <!-- ============================================================ 6. CSS DIFERIDO â no bloquean el render Técnica: media="print" + onload="this.media='all'" El navegador los descarga en paralelo sin bloquear el LCP ============================================================ --> 352 353 354 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" 355 media="print" onload="this.media='all'"> 356 <noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"></noscript> 357 358 <link rel="stylesheet" href="https://quelibroleo.com/css/magnific-popup.min.css" 359 media="print" onload="this.media='all'"> 360 <noscript><link rel="stylesheet" href="https://quelibroleo.com/css/magnific-popup.min.css"></noscript> 361 362 <link rel="stylesheet" href="https://quelibroleo.com/css/flag.min.css" 363 media="print" onload="this.media='all'"> 364 <noscript><link rel="stylesheet" href="https://quelibroleo.com/css/flag.min.css"></noscript> 365 366 <!-- Google Fonts diferido --> 367 <link rel="stylesheet" 368 href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin&display=swap" 369 media="print" onload="this.media='all'"> 370 <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin&display=swap"></noscript> 371 372 <link rel="stylesheet" 373 href="https://fonts.googleapis.com/css?family=Lato:400,700|PT+Serif:400,700&display=swap" 374 media="print" onload="this.media='all'"> 375 <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700|PT+Serif:400,700&display=swap"></noscript> 376 377 <link rel="stylesheet" 378 href="https://fonts.googleapis.com/icon?family=Material+Icons" 379 media="print" onload="this.media='all'"> 380 <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"></noscript> 381 382 <!-- ============================================================ 7. ESTILOS INLINE CRÃTICOS â evitan CLS y saltos visuales ============================================================ --> 383 <style> 384 /* Reserva espacio para los banners flotantes antes de que cargue el CSS completo */ 385 .publicidad_flotante_derecha, 386 .publicidad_flotante_izquierda { 387 contain: strict; 388 width: 120px; 389 height: 600px; 390 } 391 @media only screen and (max-width: 1440px) { 392 .publicidad_flotante_derecha, 393 .publicidad_flotante_izquierda { display: none; } 394 } 395 396 /* 397 * FIX ADBLOCKER FALSO POSITIVO 398 * La regla body>
398div:not(...) la dejamos aquà en lugar de en un CSS externo 399 * para que no haya un flash donde el div desaparece antes de que cargue el CSS. 400 * ADEMÃS eliminamos el <amp-consent> del body â eso era lo que disparaba 401 * los adblockers porque amp-consent inyecta iframes de doubleclick. 402 */ 403 body > div:not([class*="phpdebugbar"]):not([class*="S_ACCOUNT_LIST"]):not([class*="popover"]):not([class*="iyp"]):not([id*="iyp"]):not([class*="mfp"]):not(.tooltip):not([data-tether-id]):not([class*="publicidad"]) { 404 display: block; 405 } 406 407 /* 408 * FIX: las posiciones se calculaban con un ancho de .container distinto para 409 * cada banner (1100px y 1250px) cuando el .container real de Bootstrap mide 410 * 1170px a partir de 1200px de viewport. Con la formula anterior el banner 411 * derecho solo se veia a partir de ~2320px de viewport (practicamente nadie) 412 * y el izquierdo a partir de ~1510px. Formula corregida: mismo ancho de 413 * .container (1170px) y mismo hueco (15px) para ambos lados -> simetricos y 414 * visibles ya desde ~1440px, que es el breakpoint que usa el media query de arriba. 415 */ 416 .publicidad_flotante_derecha { 417 display: block; 418 z-index: 99999; 419 position: fixed; 420 right: calc((100vw - 1170px) / 2 - 135px); 421 top: 100px; 422 height: 600px; 423 width: 120px; 424 transition: all 0.3s ease-in-out; 425 } 426 427 .publicidad_flotante_izquierda { 428 display: block; 429 position: fixed; 430 top: 180px; 431 height: 600px; 432 width: 120px; 433 z-index: 9999; 434 transition: all 0.3s ease-in-out; 435 left: calc((100vw - 1170px) / 2 - 135px); 436 border-radius: 6px; 437 box-shadow: 0 2px 8px rgba(0,0,0,0.2); 438 } 439 </style> 440 441 <!-- ============================================================ 8. GOOGLE TAG â solo si NO es Lighthouse/PageSpeed 442 IMPORTANTE: este bloque define window.gtag() como función global. Es NECESARIO 443 aunque GTM también cargue GA4, porque hay scripts en common.header / vistas hijas 444 que llaman a gtag('event', 'click', { event_callback: ... }) para trackear menús. 445 Si gtag no está definida, los enlaces del menú dejan de navegar. 446 Para evitar el duplicado de page_view, GTM lo dispara solo (send_page_view:false aquÃ). 447 ============================================================ -->
vendor: 72 bytes, lines 447-448
447 448 <script async src="https://www.googletagmanager.com/gtag/js?id=
448G-4Z814EG21L
vendor: 16 bytes, lines 448-449
448"></script> 449
449<script> 450 window.dataLayer = window.dataLayer || []; 451 function gtag(){ dataLayer.push(arguments); } 452 gtag('js', new Date()); 453 gtag('config', 'G-4Z814EG21L', { 454 'allow_enhanced_conversions': true, 455 'linker': { 'accept_incoming': false } 456 }); 457 </script>
457 458 459 <!-- Limpia _gl y _ga de la URL (no espera a jQuery) --> 460
460<script> 461 (function(){ 462 if(window.location.search.indexOf('_gl=')>-1||window.location.search.indexOf('_ga=')>-1){ 463 var u=new URL(window.location.href); 464 u.searchParams.delete('_gl');u.searchParams.delete('_ga'); 465 window.history.replaceState({},'',u.pathname+u.search); 466 } 467 })(); 468 </script>
468 469 470 <!-- 9. VARIABLES JS GLOBALES --> 471
471<script> 472 var base = "https://quelibroleo.com"; 473 var csrf = "d4fHaNKW3MMbbYJdb3jiZh7Aqjt5tDAMnJNvu9CD"; 474 475 var time = 10000; 476 var autoplay = true; 477 478 var time_novedades = 12000; 479 var autoplay_novedades = true; 480 481 var time_recomendaciones = 11000; 482 var autoplay_recomendaciones = true; 483 </script>
483 484 485 <style> 486 .ba-section { padding: 30px 0 60px; } 487 488 .ba-card { 489 background: #fff; 490 border-radius: 14px; 491 box-shadow: 0 2px 20px rgba(0,0,0,0.06); 492 border: 1px solid #eee; 493 padding: 36px 40px; 494 max-width: 820px; 495 margin: 0 auto; 496 } 497 498 .ba-head { margin-bottom: 28px; } 499 .ba-title { 500 font-size: 28px; 501 font-weight: 700; 502 color: #222; 503 margin: 0 0 6px; 504 } 505 .ba-subtitle { 506 font-size: 15px; 507 color: #6a7280; 508 margin: 0; 509 } 510 511 .ba-alert { 512 background: #fff4f4; 513 border-left: 4px solid #e5484d; 514 padding: 12px 16px; 515 border-radius: 6px; 516 margin-bottom: 20px; 517 color: #7f1d1d; 518 font-size: 14px; 519 } 520 .ba-alert a { color: inherit; font-weight: 700; text-decoration: underline; } 521 522 .ba-form { display: block; } 523 .ba-field { margin-bottom: 20px; } 524 .ba-field-full { grid-column: 1 / -1; } 525 526 .ba-grid-2 { 527 display: grid; 528 grid-template-columns: 1fr 1fr; 529 gap: 20px; 530 margin-bottom: 20px; 531 } 532 @media (max-width: 640px) { 533 .ba-grid-2 { grid-template-columns: 1fr; gap: 0; } 534 .ba-card { padding: 24px 20px; border-radius: 10px; } 535 } 536 537 .ba-field label { 538 display: block; 539 font-size: 13px; 540 font-weight: 700; 541 text-transform: uppercase; 542 letter-spacing: 0.4px; 543 color: #4a5568; 544 margin-bottom: 6px; 545 } 546 547 .ba-input-wrap { position: relative; } 548 .ba-input-wrap input, 549 .ba-input-wrap select, 550 #tags, 551 .ba-field input[type="text"] { 552 width: 100%; 553 height: 46px; 554 padding: 10px 14px 10px 42px; 555 font-size: 15px; 556 color: #111; 557 background: #f8f9fb; 558 border: 1.5px solid #e3e6ec; 559 border-radius: 10px; 560 outline: none; 561 transition: border-color .15s, background .15s, box-shadow .15s; 562 -webkit-appearance: none; 563 appearance: none; 564 } 565 #tags { padding-left: 14px; } 566 .ba-input-wrap input:focus, 567 .ba-input-wrap select:focus, 568 #tags:focus { 569 border-color: #7cc142; 570 background: #fff; 571 box-shadow: 0 0 0 3px rgba(124,193,66,0.15); 572 } 573 .ba-input-wrap input::placeholder { color: #9aa2b1; } 574 575 .ba-input-icon { 576 position: absolute; 577 left: 14px; 578 top: 50%; 579 transform: translateY(-50%); 580 color: #9aa2b1; 581 font-size: 15px; 582 pointer-events: none; 583 } 584 .ba-input-wrap input:focus ~ .ba-input-icon, 585 .ba-input-wrap select:focus ~ .ba-input-icon { color: #7cc142; } 586 587 .ba-select { cursor: pointer; padding-right: 40px; } 588 .ba-select-arrow { 589 position: absolute; 590 right: 16px; 591 top: 50%; 592 transform: translateY(-50%); 593 color: #9aa2b1; 594 font-size: 12px; 595 pointer-events: none; 596 } 597 598 .ba-hint { 599 display: block; 600 margin-top: 6px; 601 font-size: 12px; 602 color: #7a8598; 603 } 604 605 .ba-actions { 606 display: flex; 607 justify-content: flex-end; 608 margin-top: 8px; 609 padding-top: 20px; 610 border-top: 1px solid #f0f2f5; 611 } 612 .ba-btn { 613 display: inline-flex; 614 align-items: center; 615 gap: 8px; 616 background: #7cc142; 617 color: #fff; 618 font-weight: 700; 619 font-size: 15px; 620 padding: 12px 28px; 621 border: none; 622 border-radius: 10px; 623 cursor: pointer; 624 transition: background .15s, transform .05s; 625 } 626 .ba-btn:hover { background: #6bab35; } 627 .ba-btn:active { transform: translateY(1px); } 628 .ba-btn i { font-size: 14px; } 629 630 .tagsinput { 631 width: 100% !important; 632 border: 1.5px solid #e3e6ec !important; 633 background: #f8f9fb !important; 634 border-radius: 10px !important; 635 padding: 8px 10px !important; 636 min-height: 46px; 637 } 638 .tagsinput span.tag { 639 background: #7cc142 !important; 640 border: none !important; 641 color: #fff !important; 642 border-radius: 6px !important; 643 padding: 3px 8px !important; 644 } 645 .tagsinput span.tag a { color: #fff !important; } 646 </style> 647</head> 648 649<body ontouchstart=""> 650 651 <!-- GTM noscript â solo si no es bot ni paÃs sospechoso -->
vendor: 85 bytes, lines 651-653
651 652 <noscript> 653 <iframe src="https://www.googletagmanager.com/ns.html?id=
653GTM-WQ22VZH
vendor: 113 bytes, lines 653-657
653" 654 height="0" width="0" style="display:none;visibility:hidden"></iframe> 655 </noscript> 656 657
657<div id="fb-root"></div> 658 <header> 659 660 661 <div class="top"> 662 <div class="container"> 663 <div class="flex"> 664 <div class="user"> 665 <a href="#login" class="openLogin"> 666 <i class="fa fa-user"></i>Iniciar sesión 667 </a> 668 <a href="https://quelibroleo.com/registro">Crear cuenta</a> 669 </div> 670 <div class="links"> 671 <div class="facebook counter"> 672 <a href="//facebook.com/quelibroleo" target="_blank" rel="noopener noreferrer"> 673 <i class="fab fa-facebook"></i> 674 1.3M 675 <i class="fa fa-thumbs-up"></i> 676 </a> 677 </div> 678 <div class="twitter counter"> 679 <a href="//twitter.com/quelibroleo" target="_blank" rel="noopener noreferrer"> 680 <i class="fab fa-twitter"></i> 681 146k 682 <i class="fa fa-thumbs-up"></i> 683 </a> 684 </div> 685 <div class="pinterest counter"> 686 <a href="//pinterest.com/quelibroleo" target="_blank" rel="noopener noreferrer"> 687 <i class="fab fa-pinterest"></i> 688 125.6K 689 <i class="fa fa-thumbs-up"></i> 690 </a> 691 </div> 692 </div> 693 </div> 694 </div> 695 </div> 696 697 <div class="container"> 698 <div class="flex"> 699 <div class="logo"> 700 <a href="https://quelibroleo.com"> 701 702 <img src="https://quelibroleo.com/images/logo.jpg" 703 alt="Logo Quelibroleo" 704 width="438" height="auto" 705 fetchpriority="high" 706 decoding="sync"> 707 </a> 708 </div> 709 <div class="widgets"> 710 <div id="buscador_superior"> 711 <form id="form_buscar_simple" method="post" action="https://quelibroleo.com/busqueda-simple" 712 autocomplete="off" role="search" style="display:inline;"> 713 <input type="hidden" name="_token" value="d4fHaNKW3MMbbYJdb3jiZh7Aqjt5tDAMnJNvu9CD"> <input id="busqueda_superior" type="search" name="busqueda_superior" 714 placeholder="Buscar por palabra clave (mÃnimo 4 caracteres)" autocomplete="off" 715 autocorrect="off" spellcheck="false" inputmode="search" style="width:350px;"> 716 <input type="hidden" id="busqueda_superior_simple" name="busqueda_superior_simple" value=""> 717 <i id="lupa_buscador_superior" class="fa fa-search" style="display:none;"></i> 718 </form> 719 </div> 720 <div id="resultado_buscador_superior"></div> 721 <div class="links"> 722 <a href="https://quelibroleo.com/buscador-avanzado"> 723 <i class="fa fa-search"></i> Búsqueda avanzada 724 </a> 725 </div> 726 <button id="openmenu" class="btn btn-primary" aria-label="Abrir menú"> 727 <i class="fa fa-navicon"></i> 728 </button> 729 </div> 730 </div> 731 </div> 732 733 <div class="menu"> 734 <div class="container"> 735 <div class="row"> 736 <nav> 737 <ul> 738 <li class=""> 739 <a href="https://quelibroleo.com">Inicio</a> 740 </li> 741 <li id="libros" > 742 <a href="https://quelibroleo.com/novedades">Libros</a> 743 <ul class="submenu"> 744 <li><a href="https://quelibroleo.com/novedades">Novedades</a></li> 745 <li><a href="https://quelibroleo.com/premios-literarios">Premios literarios</a></li> 746 <li><a href="https://quelibroleo.com/opiniones-quelibroleo">Opiniones quelibroleo</a></li> 747 <li><a href="https://quelibroleo.com/ultimas-opiniones">Ãltimas opiniones</a></li> 748 <li><a href="https://quelibroleo.com/editoriales">Editoriales</a></li> 749 </ul> 750 </li> 751 <li id="losmejores" > 752 <a href="https://quelibroleo.com/mejores-quelibroleo">Los mejores</a> 753 <ul class="submenu"> 754 <li><a href="https://quelibroleo.com/mejores-quelibroleo">Mejores Quelibroleo</a></li> 755 <li><a href="https://quelibroleo.com/mejores-genero">Mejores por género</a></li> 756 <li><a href="https://quelibroleo.com/mejores-best-sellers">Mejores best-sellers</a></li> 757 <li><a href="https://quelibroleo.com/mejores-semana">Mejores de la semana</a></li> 758 <li><a href="https://quelibroleo.com/mejores-mes">Mejores del mes</a></li> 759 <li><a href="https://quelibroleo.com/libros-mas-votados">Los más votados</a></li> 760 <li><a href="https://quelibroleo.com/libros-mas-criticados">Los más criticados</a></li> 761 </ul> 762 </li> 763 <li class=""> 764 <a href="https://quelibroleo.com/best-sellers">Best-Sellers</a> 765 </li> 766 <li class=""> 767 <a href="https://quelibroleo.com/lectores">Lectores</a> 768 </li> 769 <li><a href="https://www.facebook.com/ClubLecturaQuelibroleo" target="_blank">Club de lectura</a></li> 770 <li><a href="https://quelibroleo.com/noticias">Blog</a></li> 771 <li class=""> 772 <a href="https://quelibroleo.com/librero-virtual">El librero virtual</a> 773 </li> 774 </ul> 775 </nav> 776 </div> 777 </div> 778 </div> 779 780 <div class="white-popup mfp-hide" id="login"> 781 <div class="login"> 782 <h3>Iniciar sesión</h3> 783 784 785 786 <form action="https://quelibroleo.com/login" method="post" id="login-form"> 787 <input type="hidden" name="_token" value="d4fHaNKW3MMbbYJdb3jiZh7Aqjt5tDAMnJNvu9CD"> 788 <input type="hidden" name="recaptcha_token" id="recaptcha_token_login"> 789 790 <div class="form-group"> 791 <div class="input-group"> 792 <div class="input-group-addon"><i class="fa fa-user fa-fw"></i></div> 793 <input type="text" class="form-control" name="user" placeholder="Usuario o correo electrónico" value="" required> 794 </div> 795 </div> 796 <div class="form-group"> 797 <div class="input-group"> 798 <div class="input-group-addon"><i class="fa fa-lock fa-fw"></i></div> 799 <input type="password" class="form-control" name="password" placeholder="Contraseña" required> 800 </div> 801 </div> 802 <div class="form-group" style="text-align: left"> 803 <div class="checkbox"> 804 <label> 805 <input type="checkbox" name="remember" > Mantener sesión activa 806 </label> 807 </div> 808 </div> 809 <div class="form-group submit"> 810 <a href="https://quelibroleo.com/nueva-contrasena">Olvidé mi contraseña</a> 811 <button type="submit" class="btn btn-secondary">Iniciar sesión</button> 812 </div> 813 </form> 814 <hr> 815 816 <div class="social-login"> 817 <a href="https://quelibroleo.com/login/facebook" class="btn facebook btn-block"><i class="fab fa-facebook"></i> Iniciar sesión con Facebook</a> 818 <a href="https://quelibroleo.com/login/google" class="btn google btn-block mt-2"><i class="fab fa-google"></i> Iniciar sesión con Google</a> 819 </div> 820 821 822 <p class="login-register-link"> 823 ¿No tienes cuenta? <a href="https://quelibroleo.com/registro">RegÃstrate gratis</a> 824 </p> 825 </div> 826</div> 827 828 829 830 831</header> 832 833 834 <!-- Banner superior TAMAÃO FIJO (leaderboard) â GAM (qll_top) + Amazon TAM en subasta. 835 NO usa qll-flex ni fluid: es un banner-header, tiene altura acotada para no 836 romper la barra superior. Se colapsa si no hay demanda. --> 837 <div class="banner-superior banner-top-fixed" data-qll-wrap="collapse-if-empty"> 838 <div class="container" style="text-align:center;"> 839 840 <div id="qll-top" data-adsense-fallback="6415838494"></div> 841 </div> 842 </div> 843
843<script> 844 if (window.QLLAds) { 845 QLLAds.slot({ 846 id: 'qll-top', 847 unit: 'qll_top', 848 // Solo tamaños "de banner" â NO 970x250/280 (rompen la cabecera) NI fluid. 849 sizes: [ 850 [728,90],[970,90],[468,60], 851 [320,50],[320,100] 852 ], 853 sizeMapping: [ 854 { viewport: [1200,0], sizes: [[970,90],[728,90],[468,60]] }, 855 { viewport: [980,0], sizes: [[728,90],[468,60]] }, 856 { viewport: [0,0], sizes: [[320,100],[320,50]] } 857 ] 858 }); 859 } 860 </script>
860 861 862<!-- UI scripts: buscador y alerta de exito -->
863<script> 864 document.addEventListener('click', function(event) { 865 var buscador = document.getElementById('buscador_superior'); 866 var resultados = document.getElementById('resultado_buscador_superior'); 867 if (buscador && resultados && !buscador.contains(event.target)) { 868 resultados.style.display = 'none'; 869 } 870 }); 871 872 var inputBuscador = document.getElementById('busqueda_superior'); 873 if (inputBuscador) { 874 inputBuscador.addEventListener('input', function() { 875 var resultados = document.getElementById('resultado_buscador_superior'); 876 if (resultados) { 877 resultados.style.display = this.value.length >= 4 ? 'block' : 'none'; 878 } 879 }); 880 } 881 882 setTimeout(function() { 883 var alerta = document.querySelector('.alert-success'); 884 if (alerta) { 885 alerta.style.transition = 'opacity 0.5s ease'; 886 alerta.style.opacity = '0'; 887 setTimeout(function() { alerta.remove(); }, 500); 888 } 889 }, 5000); 890</script>
890 891 <main role="main"> 892 <section class="ba-section"> 893 <div class="container"> 894 <div class="ba-card"> 895 <div class="ba-head"> 896 <h1 class="ba-title">Buscador Avanzado</h1> 897 <p class="ba-subtitle">Filtra por tÃtulo, autor, editorial, género o temática de la sinopsis.</p> 898 </div> 899 900 901 <form action="https://quelibroleo.com/buscador-avanzado/buscar" method="post" class="ba-form"> 902 <input type="hidden" name="_token" value="d4fHaNKW3MMbbYJdb3jiZh7Aqjt5tDAMnJNvu9CD"> 903 904 <div class="ba-field ba-field-full"> 905 <label for="ba-titulo">TÃtulo</label> 906 <div class="ba-input-wrap"> 907 <i class="fa fa-book ba-input-icon" aria-hidden="true"></i> 908 <input id="ba-titulo" type="text" name="titulo" minlength="2" placeholder="p. ej. Patria"> 909 </div> 910 </div> 911 912 <div class="ba-grid-2"> 913 <div class="ba-field"> 914 <label for="ba-autor">Autor</label> 915 <div class="ba-input-wrap"> 916 <i class="fa fa-user ba-input-icon" aria-hidden="true"></i> 917 <input id="ba-autor" type="text" name="autor" list="ba-autor-list" placeholder="p. ej. Aramburu" autocomplete="off"> 918 <datalist id="ba-autor-list"></datalist> 919 </div> 920 </div> 921 922 <div class="ba-field"> 923 <label for="ba-editorial">Editorial</label> 924 <div class="ba-input-wrap"> 925 <i class="fa fa-building ba-input-icon" aria-hidden="true"></i> 926 <input id="ba-editorial" type="text" name="editorial" list="ba-editorial-list" placeholder="p. ej. Tusquets" autocomplete="off"> 927 <datalist id="ba-editorial-list"></datalist> 928 </div> 929 </div> 930 </div> 931 932 <div class="ba-field ba-field-full"> 933 <label for="ba-genero">Género</label> 934 <div class="ba-input-wrap"> 935 <i class="fa fa-tags ba-input-icon" aria-hidden="true"></i> 936 <select id="ba-genero" name="genero" class="ba-select"> 937 <option value="">â Todos los géneros â</option> 938 <option value="BiografÃas, Memorias">BiografÃas, Memorias</option> 939 <option value="Clásicos de la literatura">Clásicos de la literatura</option> 940 <option value="Cómics, Novela Gráfica">Cómics, Novela Gráfica</option> 941 <option value="EconomÃa, Empresa, Marketing">EconomÃa, Empresa, Marketing</option> 942 <option value="Ensayo">Ensayo</option> 943 <option value="Fantástica, ciencia ficción">Fantástica, ciencia ficción</option> 944 <option value="Ficción literaria">Ficción literaria</option> 945 <option value="Histórica y aventuras">Histórica y aventuras</option> 946 <option value="Humor">Humor</option> 947 <option value="Infantil y juvenil">Infantil y juvenil</option> 948 <option value="Lecturas complementarias">Lecturas complementarias</option> 949 <option value="Literatura contemporánea">Literatura contemporánea</option> 950 <option value="Narrativa">Narrativa</option> 951 <option value="No Ficción">No Ficción</option> 952 <option value="Novela negra, intriga, terror">Novela negra, intriga, terror</option> 953 <option value="PoesÃa">PoesÃa</option> 954 <option value="PoesÃa, Teatro">PoesÃa, Teatro</option> 955 <option value="Romántica, erótica">Romántica, erótica</option> 956 <option value="varios">varios</option> 957 <option value="Varios, otros géneros">Varios, otros géneros</option> 958 </select> 959 <i class="fa fa-chevron-down ba-select-arrow" aria-hidden="true"></i> 960 </div> 961 </div> 962 963 <div class="ba-field ba-field-full"> 964 <label for="tags">Temática</label> 965 <input id="tags" name="tags" value="" placeholder="p. ej. distopÃa, viajes, guerra"> 966 <small class="ba-hint">Palabras clave separadas por coma. Buscamos coincidencias dentro de la sinopsis de cada libro.</small> 967 </div> 968 969 <div class="ba-actions"> 970 <button type="submit" class="ba-btn"> 971 <i class="fa fa-search"></i> Buscar libros 972 </button> 973 </div> 974 </form> 975 </div> 976 </div> 977 </section> 978 </main> 979 980 <footer> 981 <div class="container"> 982 <div class="wrapper"> 983 <div class="row"> 984 <div class="col-lg-4 col-sm-6 col-xs-12"> 985 <h4>Menú general</h4> 986 <nav> 987 <ul> 988 <li><a href="https://quelibroleo.com/quienes-somos">¿Quiénes Somos?</a></li> 989 <li><a href="https://quelibroleo.com/informacion">Información</a></li> 990 <li><a href="https://quelibroleo.com/faq-preguntas-frecuentes">FAQ</a></li> 991 <li>
991<a href="https://quelibroleo.com/recomiendanos">Recomiéndanos</a></li> 992 <li><a href="https://quelibroleo.com/publicidad">Publicidad</a></li> 993 <li><a href="https://quelibroleo.com/contacto">Contacto</a></li> 994 </ul> 995 </nav> 996 </div> 997 998 <div class="col-lg-4 col-sm-6 col-xs-12"> 999 <h4>SÃguenos</h4> 1000 <div class="social_links"> 1001 <a href="//www.facebook.com/quelibroleopuntocom" target="_blank" title="Facebook"> 1002 <i class="fab fa-facebook" aria-hidden="true"></i> 1003 </a> 1004 <a target="_blank" href="//x.com/quelibroleo"><i class="fa fa-times" 1005 aria-hidden="true"></i></a> 1006 <a target="_blank" href="//pinterest.com/quelibroleo"><i class="fab fa-pinterest" 1007 aria-hidden="true"></i></a> 1008 <a target="_blank" href="//www.linkedin.com/company/2300423"><i class="fab fa-linkedin" 1009 aria-hidden="true"></i></a> 1010 <a target="_blank" href="//www.youtube.com/user/quelibroleo"><i class="fab fa-youtube" 1011 aria-hidden="true"></i></a> 1012 <a target="_blank" href="https://quelibroleo.com/noticias/feed"><i class="fa fa-rss" 1013 aria-hidden="true"></i></a> 1014 <a target="_blank" href="https://quelibroleo.com/opiniones-quelibroleo-rss.xml"><i class="fa fa-comments" 1015+ aria-hidden="true"></i></a> 1016 <a target="_blank" href="//tiktok.com/@quelibroleo"><svg xmlns="http://www.w3.org/2000/svg" height="20" width="18" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path fill="#86bb50" d="M448 209.9a210.1 210.1 0 0 1 -122.8-39.3V349.4A162.6 162.6 0 1 1 185 188.3V278.2a74.6 74.6 0 1 0 52.2 71.2V0l88 0a121.2 121.2 0 0 0 1.9 22.2h0A122.2 122.2 0 0 0 381 102.4a121.4 121.4 0 0 0 67 20.1z"/></svg> 1017 <a target="_blank" href="//es.foursquare.com/quelibroleo"><i class="fab fa-foursquare" 1018 aria-hidden="true"></i></a> 1019 <a target="_blank" href="//www.instagram.com/quelibroleo/"><i class="fab fa-instagram" 1020 aria-hidden="true"></i></a> 1021 </div> 1022 </div> 1023 1024 <div class="col-4"> 1025 <img src="https://quelibroleo.com/images/Logo-PRTR-kit-digital.png" alt="Logo PRTR Kit Digital" height="40" loading="lazy"> 1026 <img src="https://quelibroleo.com/images/UE_negro.png" alt="Logo UE Negro" height="40" loading="lazy"> 1027 <div style="margin-top:10px;display:flex;align-items:center;gap:10px;"> 1028 <img src="https://quelibroleo.com/images/logo-comunidad-madrid.svg" alt="Logo Comunidad de Madrid" height="40" loading="lazy" style="filter:invert(1);"> 1029 <span style="color:#333;font-size:11px;line-height:1.3;max-width:200px;">Este proyecto/actividad ha recibido una subvención de la ConsejerÃa de Cultura, Turismo y Deporte de la Comunidad de Madrid</span> 1030 </div> 1031 </div> 1032 1033 <div class="col-lg-4 col-sm-6 col-xs-12"> 1034 </div> 1035 </div> 1036 </div> 1037 1038 <div class="copyright"> 1039 <ul> 1040 <li><a>Copyright © 2008-2026 QueLibroLeo</a></li> 1041 <li><a href="https://quelibroleo.com/politica-de-privacidad-y-uso-de-datos">PolÃtica de privacidad y uso de datos</a></li> 1042 </ul> 1043 </div> 1044 </div> 1045 1046
1046<script src="https://quelibroleo.com/js/jquery-3.2.1.min.js"></script>
1046 1047
1047<script src="https://quelibroleo.com/js/tether.min.js"></script>
1047 1048
1048<script src="https://quelibroleo.com/js/numeral/numeral.min.js"></script>
1048 1049
1049<script src="https://quelibroleo.com/js/numeral/locales.min.js"></script>
1049 1050
1050<script src="https://quelibroleo.com/js/bootstrap.min.js"></script>
1050 1051
1051<script src="https://quelibroleo.com/js/bootstrap-patch.js"></script>
1051 1052
1052<script src="https://quelibroleo.com/js/handlebars.min.js"></script>
1052 1053
1053<script src="https://quelibroleo.com/js/typeahead.bundle.min.js"></script>
1053 1054
1054<script src="https://quelibroleo.com/js/jquery.magnific-popup.min.js"></script>
1054 1055
1055<script src="//cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.10/semantic.min.js"></script>
1055 1056
1056<script src="https://quelibroleo.com/js/functions.js"></script>
1056 1057 1058
1059<script> 1060 // Función debounce para evitar llamadas excesivas al servidor 1061 function debounce(func, delay) { 1062 let timeout; 1063 return function (...args) { 1064 clearTimeout(timeout); 1065 timeout = setTimeout(() => func.apply(this, args), delay); 1066 }; 1067 } 1068 1069 $(document).ready(function () { 1070 const csrfToken = $('meta[name="csrf-token"]').attr('content'); 1071 1072 $('#busqueda_superior').on('input', debounce(function () { 1073 const value = $(this).val().trim(); 1074 const lupa = $('#lupa_buscador_superior'); 1075 const resultado = $('#resultado_buscador_superior'); 1076 1077 if (value.length < 4) { 1078 lupa.hide(); 1079 resultado.html(''); 1080 return; 1081 } 1082 1083 lupa.show(); 1084 $.ajax({ 1085 url: "https://quelibroleo.com/busqueda-superior", 1086 type: 'POST', 1087 headers: { 1088 'X-CSRF-TOKEN': csrfToken, 1089 }, 1090 data: { valor: value }, 1091 success: function (response) { 1092 resultado.html(response).fadeIn('slow'); 1093 }, 1094 error: function (xhr) { 1095 console.error(xhr.responseText); 1096 }, 1097 }); 1098 }, 300)); 1099 1100 // Búsqueda al hacer clic en la lupa 1101 $('#lupa_buscador_superior').on('click', function (e) { 1102 e.preventDefault(); 1103 buscar(); 1104 }); 1105 1106 // Búsqueda al presionar ENTER en el input 1107 $('#busqueda_superior').on('keydown', function (e) { 1108 if (e.keyCode === 13) { // Código de tecla ENTER 1109 e.preventDefault(); // Evita el envÃo automático del formulario 1110 buscar(); 1111 } 1112 }); 1113 1114 // Función para ejecutar la búsqueda 1115 function buscar() { 1116 const valor_buscado = $('#busqueda_superior').val().trim(); 1117 if (valor_buscado.length >= 4) { 1118 $('#busqueda_superior_simple').val(valor_buscado); 1119 $('#form_buscar_simple').submit(); 1120 } 1121 } 1122 }); 1123 1124</script>
1124 1125 1126 1127 1128
1128<script src="https://quelibroleo.com/js/jquery.tagsinput.min.js"></script>
1128 1129
1129<script> 1130 $(function () { 1131 $('#tags').tagsInput({ defaultText: '' }); 1132 1133 function attachAutocomplete(inputSel, listSel, url, field) { 1134 var $input = $(inputSel), $list = $(listSel), timer; 1135 $input.on('input', function () { 1136 var q = $input.val(); 1137 if (q.length < 2) return; 1138 clearTimeout(timer); 1139 timer = setTimeout(function () { 1140 $.getJSON(base + url + encodeURIComponent(q), function (data) { 1141 $list.empty(); 1142 $.each(data, function (i, item) { 1143 $list.append($('<option>').val(item[field])); 1144 }); 1145 }); 1146 }, 200); 1147 }); 1148 } 1149 attachAutocomplete('#ba-autor', '#ba-autor-list', '/ajax/search_autor?autor=', 'autor'); 1150 attachAutocomplete('#ba-editorial', '#ba-editorial-list', '/ajax/search_editorial?editorial=', 'editorial'); 1151 }); 1152 </script>
1152 1153 1154
1154<script src="https://quelibroleo.com/js/main.js?v=1782973518"></script>
1154 1155 1156</footer> 1157 1158 1159 <div id="qll-footer-sticky-wrap" class="d-lg-none" data-qll-wrap="collapse-if-empty" 1160 style="position:fixed; left:0; right:0; bottom:0; z-index:9999; background:#fff; border-top:1px solid #ddd; box-shadow:0 -2px 8px rgba(0,0,0,.08); text-align:center; padding:4px 0;"> 1161 <button type="button" onclick="document.getElementById('qll-footer-sticky-wrap').style.display='none';" 1162 aria-label="Cerrar" 1163 style="position:absolute; top:-14px; right:6px; width:24px; height:24px; border-radius:50%; border:1px solid #ccc; background:#fff; font-size:14px; line-height:22px; cursor:pointer; padding:0;">×</button> 1164 <div id="qll-footer-sticky"></div> 1165 </div> 1166
1166<script> 1167 if (window.QLLAds) { 1168 QLLAds.slot({ 1169 id: 'qll-footer-sticky', 1170 unit: 'qll_footer_sticky', 1171 sizes: [[320,50],[728,90]], 1172 sizeMapping: [ 1173 { viewport: [980,0], sizes: [] }, 1174 { viewport: [0,0], sizes: [[320,50]] } 1175 ] 1176 }); 1177 } 1178 </script>
1178 1179 1180 <!-- amp-consent eliminado: causaba iframe bloqueado de doubleclick (CORS). Para GDPR usar Funding Choices via GTM. --> 1181 1182 <input type="hidden" name="recaptcha-response" id="recaptcha-response"> 1183 1184 <!-- ============================================================ JAVASCRIPT â al final del body para no bloquear el render GTM + Facebook solo si no es Lighthouse ============================================================ --> 1185
1185<script> 1186 // Espera a que el SDK de Facebook esté cargado 1187 window.fbAsyncInit = function () { 1188 FB.init({ 1189 appId: '385015188232719', // Tu App ID de Facebook 1190 cookie: true, // Habilita cookies para permitir que el servidor acceda a la sesión 1191 xfbml: true, // Procesa los plugins sociales en la página 1192 version: 'v22.0' // Actualizado 2026-09-24 desde v20.0 (Meta deprecation) 1193 }); 1194 1195 FB.AppEvents.logPageView(); 1196 }; 1197 1198 // Cargar el SDK de Facebook de forma asÃncrona 1199 (function (d, s, id) { 1200 var js, fjs = d.getElementsByTagName(s)[0]; 1201 if (d.getElementById(id)) return; 1202 js = d.createElement(s); js.id = id; 1203 js.src = "https://connect.facebook.net/es_LA/sdk.js"; 1204 fjs.parentNode.insertBefore(js, fjs); 1205 }(document, 'script', 'facebook-jssdk')); 1206 1207 1208 function shareFB() { 1209 if (typeof FB !== 'undefined') { 1210 FB.ui({ 1211 method: 'share', 1212 href: 'https://quelibroleo.com/buscador-avanzado', // URL actual de la página 1213 }, function(response) { 1214 if (response && !response.error_message) { 1215 console.log('Compartido correctamente'); 1216 } else { 1217 console.error('Error al compartir: ', response.error_message); 1218 } 1219 }); 1220 } else { 1221 console.error('El SDK de Facebook no se ha cargado correctamente.'); 1222 } 1223 } 1224</script>
1224 1225 1226 <!-- GTM --> 1227
1227<script>
vendor: 417 bytes, lines 1227-1233
1227 1228 (function(w,d,s,l,i){ 1229 w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'}); 1230 var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:''; 1231 j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; 1232 f.parentNode.insertBefore(j,f); 1233 })(window,document,'script','dataLayer','
1233GTM-WQ22VZH
vendor: 12 bytes, lines 1233-1234
1233'); 1234
1234</script>
1234 1235 1236 <!-- Scripts de página especÃfica --> 1237 1238 <!-- ============================================================ reCAPTCHA â solo en rutas que lo necesitan y fuera de bots ============================================================ --> 1239 1240 1241</body> 1242</html>
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.