1 2 3 4<!DOCTYPE html> 5<!-- BEGIN templates/base.html --> 6<html> 7<head> 8 <meta charset="UTF-8"> 9 <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no"> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 11 <meta name="msapplication-tap-highlight" content="no" /> 12 <meta name="robots" content="noindex,nofollow"> 13 14 <title> 15 Qvadix 16 </title> 17 18 <!-- Favicon --> 19 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/flag-icons.min.css"> 20 <link rel="icon" href="/static/img/favicon-qvadix.ico" type="image/vnd.microsoft.icon" /> 21 22 23 <!-- Bootstrap --> 24 <link rel="stylesheet" as="style" href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"> 25 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css" integrity="sha512-2SwdPD6INVrV/lHTZbO2nodKhrnDdJK9/kg2XD1r9uGqPo1cUbujc+IYdlYdEErWNu69gVcYgdxlmVmzTWnetw==" crossorigin="anonymous" referrerpolicy="no-referrer" /> 26 <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" 27 type='text/css'> 28 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" 29 integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> 30 <!-- From bower-components --> 31 <link rel="stylesheet" type='text/css' 32 href="/static/bower_components/weather-icons/css/weather-icons.min.css" media="all"> 33 <link rel="stylesheet" type='text/css' 34 href="/static/bower_components/metrics-graphics/dist/metricsgraphics.css"> 35 <link rel="stylesheet" type='text/css' href="/static/bower_components/chartist/dist/chartist.min.css"> 36 <link rel="stylesheet" type='text/css' href="/static/bower_components/uikit/css/uikit.almost-flat.min.css" 37 media="all"> 38 39 <!-- From assert --> 40 <link rel="stylesheet" type='text/css' href="/static/assets/icons/flags/flags.css" media="all"> 41 <link rel="stylesheet" type='text/css' href="/static/assets/css/style_switcher.min.css" media="all"> 42 <link rel="stylesheet" type='text/css' href="/static/assets/css/main.css" media="all"> 43 <link rel="stylesheet" type='text/css' href="/static/assets/css/ckeditor-custom.css" media="all"> 44 <link rel="stylesheet" type='text/css' href="/static/assets/css/new_back.css" media="all"> 45 <link rel="stylesheet" type='text/css' href="/static/assets/css/themes/themes_combined.min.css" media="all"> 46 <link rel="stylesheet" type='text/css' href="/static/assets/skins/dropify/css/dropify.css"> 47 48 <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 49 <link href="https://fonts.googleapis.com/icon?family=Material+Icons+Outlined" rel="stylesheet"> 50 51 <!-- Custom --> 52 <link rel="stylesheet" type='text/css' href="/static/css/custom.css" media="all"> 53 <link rel="stylesheet" type='text/css' href="/static/css/breadcrumbs.css" media="all"> 54 <link rel="stylesheet" type='text/css' href="/static/css/pnotify.custom.min.css" media="all"> 55 56 57 58 59 60 <link rel="stylesheet" href="/static/css/base/base.css"> 61 62<style> 63 /* ======================================== 64 LOGIN PAGE - QVADIX TECH REDESIGN 65 ======================================== */ 66 67 :root { 68 --primary: #1E3A8A; 69 --primary-dark: #152b66; 70 --secondary: #717c9a; 71 --secondary-light: #8e99b5; 72 --dark: #1e293b; 73 --light: #ffffff; 74 --gray-bg: #f8fafc; 75 --gray-border: #e2e8f0; 76 --success: #10b981; 77 --warning: #f59e0b; 78 --error: #ef4444; 79 --header-height: 70px; 80 } 81 82 /* Reset y estructura base */ 83 body.login_page { 84 min-height: 100vh; 85 display: flex; 86 align-items: center; 87 font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; 88 margin: 0; 89 padding: 0; 90 position: relative; 91 background-color: var(--light); 92 } 93 94 /* Fondo con imagen + overlay */ 95 body.login_page::before { 96 content: ''; 97 position: fixed; 98 top: 0; 99 left: 0; 100 right: 0; 101 bottom: 0; 102 background-image: linear-gradient(rgba(255,255,255,0.9), rgba(255,255,255,0.8)), url("/static/img/qvadix/bgsaas.jpg"); 103 background-size: cover; 104 background-position: center; 105 background-repeat: no-repeat; 106 pointer-events: none; 107 z-index: 0; 108 } 109 110 /* Grid tecnológico superpuesto (sutil) */ 111 body.login_page::after { 112 content: ''; 113 position: fixed; 114 top: 0; 115 left: 0; 116 right: 0; 117 bottom: 0; 118 background-image: 119 linear-gradient(var(--primary) 0.5px, transparent 0.5px), 120 linear-gradient(90deg, var(--primary) 0.5px, transparent 0.5px); 121 background-size: 50px 50px; 122 opacity: 0.02; 123 pointer-events: none; 124 z-index: 1; 125 } 126 127 /* Header superior */ 128 .top-header { 129 position: fixed; 130 top: 0; 131 left: 0; 132 right: 0; 133 height: var(--header-height); 134 background: rgba(255, 255, 255, 0.95); 135 backdrop-filter: blur(10px); 136 border-bottom: 1px solid var(--gray-border); 137 display: flex; 138 align-items: center; 139 padding: 0 40px; 140 z-index: 100; 141 } 142 143 .header-content { 144 display: flex; 145 align-items: center; 146 justify-content: space-between; 147 width: 100%; 148 max-width: 1400px; 149 margin: 0 auto; 150 } 151 152 .header-logo { 153 height: 40px; 154 } 155 156 .header-logo img { 157 height: 100%; 158 width: auto; 159 } 160 161 .header-nav { 162 display: flex; 163 gap: 32px; 164 align-items: center; 165 } 166 167 .header-nav a { 168 color: var(--dark); 169 text-decoration: none; 170 font-size: 14px; 171 font-weight: 500; 172 transition: color 0.2s; 173 } 174 175 .header-nav a:hover { 176 color: var(--primary); 177 } 178 179 .header-demo { 180 background: var(--primary); 181 color: white !important; 182 padding: 8px 20px; 183 border-radius: 40px; 184 font-weight: 600; 185 } 186 187 .header-demo:hover { 188 background: var(--primary-dark); 189 color: white !important; 190 } 191 192 /* Contenedor principal */ 193 .login-container { 194 width: 100%; 195 max-width: 1400px; 196 margin: 0 auto; 197 padding: calc(var(--header-height) + 40px) 40px 40px; 198 display: grid; 199 grid-template-columns: 1fr 1fr; 200 gap: 60px; 201 align-items: center; 202 position: relative; 203 z-index: 10; 204 } 205 206 /* Lado izquierdo - Contenido de marketing */ 207 .marketing-side { 208 padding-right: 40px; 209 } 210 211 .badge { 212 display: inline-flex; 213 align-items: center; 214 gap: 8px; 215 background: rgba(30, 58, 138, 0.08); 216 color: var(--primary); 217 padding: 8px 16px; 218 border-radius: 40px; 219 font-size: 13px; 220 font-weight: 600; 221 margin-bottom: 24px; 222 } 223 224 .badge i { 225 font-size: 16px; 226 } 227 228 .marketing-title { 229 font-size: 55px; 230 font-weight: 800; 231 line-height: 1.1; 232 color: var(--dark); 233 margin: 0 0 24px 0; 234 letter-spacing: -0.02em; 235 } 236 237 .marketing-title span { 238 color: var(--primary); 239 position: relative; 240 } 241 242 .marketing-title span::after { 243 content: ''; 244 position: absolute; 245 bottom: 4px; 246 left: 0; 247 width: 100%; 248 height: 8px; 249 background: rgba(30, 58, 138, 0.2); 250 z-index: -1; 251 } 252 253 .marketing-description { 254 font-size: 22px; 255 color: var(--secondary); 256 line-height: 1.6; 257 margin-bottom: 40px; 258 max-width: 500px; 259 } 260 261 /* EstadÃsticas / Features */ 262 .stats-grid { 263 display: grid; 264 grid-template-columns: repeat(3, 1fr); 265 gap: 30px; 266 margin-bottom: 50px; 267 } 268 269 .stat-item { 270 text-align: left; 271 } 272 273 .stat-number { 274 font-size: 32px; 275 font-weight: 700; 276 color: var(--primary); 277 margin-bottom: 8px; 278 } 279 280 .stat-label { 281 font-size: 14px; 282 color: var(--secondary); 283 line-height: 1.4; 284 } 285
286 /* Lado derecho - Login */ 287 .login-side { 288 background: var(--light); 289 border-radius: 24px; 290 box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15); 291 padding: 48px; 292 border: 1px solid var(--gray-border); 293 } 294 295 .login-header { 296 margin-bottom: 32px; 297 } 298 299 .login-header h3 { 300 font-size: 24px; 301 font-weight: 700; 302 color: var(--dark); 303 margin: 0 0 8px 0; 304 } 305 306 .login-header p { 307 font-size: 15px; 308 color: var(--secondary); 309 margin: 0; 310 } 311 312 /* Formulario */ 313 .form-group { 314 margin-bottom: 24px; 315 } 316 317 .form-group label { 318 display: block; 319 font-size: 13px; 320 font-weight: 600; 321 color: var(--dark); 322 margin-bottom: 8px; 323 } 324 325 .input-wrapper { 326 position: relative; 327 display: flex; 328 align-items: center; 329 } 330 331 .input-icon { 332 position: absolute; 333 left: 16px; 334 color: var(--secondary); 335 font-size: 20px; 336 z-index: 2; 337 } 338 339 .toggle-password { 340 position: absolute; 341 right: 16px; 342 color: var(--secondary); 343 font-size: 20px; 344 cursor: pointer; 345 z-index: 2; 346 transition: all 0.2s ease; 347 background: none; 348 border: none; 349 display: flex; 350 align-items: center; 351 justify-content: center; 352 padding: 0; 353 } 354 355 .toggle-password:hover { 356 color: var(--primary); 357 } 358 359 .form-control { 360 width: 100%; 361 padding: 16px 48px 16px 48px; 362 font-size: 15px; 363 color: var(--dark); 364 background-color: var(--gray-bg); 365 border: 1px solid var(--gray-border); 366 border-radius: 12px; 367 transition: all 0.2s; 368 outline: none; 369 } 370 371 .form-control:hover { 372 background-color: var(--light); 373 border-color: var(--secondary); 374 } 375 376 .form-control:focus { 377 background-color: var(--light); 378 border-color: var(--primary); 379 box-shadow: 0 0 0 4px rgba(30, 58, 138, 0.1); 380 } 381 382 /* Opciones del formulario */ 383 .form-options { 384 display: flex; 385 align-items: center; 386 justify-content: space-between; 387 margin: 16px 0 32px; 388 } 389 390 .remember-me { 391 display: flex; 392 align-items: center; 393 gap: 8px; 394 } 395 396 .remember-me input[type="checkbox"] { 397 width: 18px; 398 height: 18px; 399 accent-color: var(--primary); 400 } 401 402 .remember-me label { 403 font-size: 14px; 404 color: var(--secondary); 405 } 406 407 .forgot-link { 408 font-size: 14px; 409 color: var(--primary); 410 text-decoration: none; 411 font-weight: 500; 412 } 413 414 .forgot-link:hover { 415 text-decoration: underline; 416 } 417 418 /* Botón de login */ 419 .btn-login { 420 width: 100%; 421 padding: 16px; 422 background: var(--primary); 423 color: white; 424 border: none; 425 border-radius: 12px; 426 font-size: 16px; 427 font-weight: 600; 428 cursor: pointer; 429 transition: background 0.2s; 430 margin-bottom: 24px; 431 } 432 433 .btn-login:hover { 434 background: var(--primary-dark); 435 } 436 437 /* Registro */ 438 .register-prompt { 439 text-align: center; 440 padding-top: 24px; 441 border-top: 1px solid var(--gray-border); 442 } 443 444 .register-prompt p { 445 font-size: 14px; 446 color: var(--secondary); 447 margin: 0; 448 } 449 450 .register-prompt a { 451 color: var(--primary); 452 text-decoration: none; 453 font-weight: 600; 454 } 455 456 .register-prompt a:hover { 457 text-decoration: underline; 458 } 459 460 /* Mensajes de error/aviso */ 461 .alert-error, .alert-warning { 462 background: #fff; 463 border-left: 4px solid; 464 border-radius: 12px; 465 padding: 16px 20px; 466 margin-bottom: 24px; 467 display: flex; 468 align-items: center; 469 gap: 12px; 470 font-size: 14px; 471 box-shadow: 0 2px 8px rgba(0,0,0,0.05); 472 } 473 474 .alert-error { 475 border-left-color: var(--error); 476 color: var(--error); 477 } 478 479 .alert-warning { 480 border-left-color: var(--warning); 481 color: var(--warning); 482 } 483 484 .error-message { 485 margin-top: 6px; 486 font-size: 12px; 487 color: var(--error); 488 display: flex; 489 align-items: center; 490 gap: 4px; 491 } 492 493 /* Panel de ayuda */ 494 .help-section { 495 background: var(--gray-bg); 496 border-radius: 12px; 497 padding: 20px; 498 margin: 24px 0 0; 499 border: 1px solid var(--gray-border); 500 } 501 502 .help-section p { 503 margin: 0; 504 font-size: 14px; 505 color: var(--dark); 506 } 507 508 .help-section strong { 509 color: var(--primary); 510 } 511 512 /* Footer */ 513 .login-footer { 514 grid-column: 1 / -1; 515 text-align: center; 516 padding-top: 60px; 517 border-top: 1px solid var(--gray-border); 518 margin-top: 10px; 519 } 520 521 .footer-links { 522 display: flex; 523 justify-content: center; 524 gap: 40px; 525 margin-bottom: 24px; 526 flex-wrap: wrap; 527 } 528 529 .footer-links a { 530 color: var(--secondary); 531 text-decoration: none; 532 font-size: 14px; 533 transition: color 0.2s; 534 } 535 536 .footer-links a:hover { 537 color: var(--primary); 538 } 539 540 .footer-logos { 541 display: flex; 542 align-items: center; 543 justify-content: center; 544 gap: 30px; 545 margin: 30px 0 20px; 546 flex-wrap: wrap; 547 } 548 549 .footer-logos img { 550 opacity: 0.8; 551 transition: opacity 0.2s; 552 max-width: 140px; 553 height: auto; 554 } 555 556 .footer-logos img:hover { 557 opacity: 1; 558 filter: brightness(1); 559 } 560 561 .footer-copyright { 562 color: var(--secondary); 563 font-size: 13px; 564 } 565 566 /* Responsive */ 567 @media (max-width: 1024px) { 568 .login-container { 569 grid-template-columns: 1fr; 570 gap: 40px; 571 } 572 573 .marketing-side { 574 padding-right: 0; 575 text-align: center; 576 } 577 578 .marketing-description { 579 margin-left: auto; 580 margin-right: auto; 581 } 582 583 .stats-grid { 584 justify-content: center; 585 } 586 } 587 588 @media (max-width: 768px) { 589 .login-container { 590 padding: calc(var(--header-height) + 20px) 20px 20px; 591 } 592 593 .marketing-title { 594 font-size: 36px; 595 } 596 597 .stats-grid { 598 grid-template-columns: 1fr; 599 gap: 20px; 600 } 601 602 .login-side { 603 padding: 32px 24px; 604 } 605 606 .header-nav { 607 gap: 16px; 608 } 609 610 .footer-links { 611 gap: 20px; 612 } 613 } 614</style> 615 616 617 618 619 <!-- jQuery (una sola vez) --> 620
620<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
620 621
621<script src="/static/js/cookie_post_csrf.js"></script>
621 622
622<script> 623 624 LANGUAGES = ["es", "en", "pl", "it", "nl"]; 625 LANGUAGE_NAMES = { "es": "Español", "en": "Inglés", "pl": "Polaco", "it": "Italiano", "nl": "Neerlandés" }; 626 627 </script>
627 628 <!-- Google Tag Manager --> 629
629<script>
vendor: 534 bytes, lines 629-641
629(function (w, d, s, l, i) { 630 w[l] = w[l] || []; 631 w[l].push({ 632 'gtm.start': 633 new Date().getTime(), event: 'gtm.js' 634 }); 635 var f = d.getElementsByTagName(s)[0], 636 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; 637 j.async = true; 638 j.src = 639 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 640 f.parentNode.insertBefore(j, f); 641 })(window, document, 'script', 'dataLayer', '
641GTM-WBVF25D
vendor: 3 bytes, line 641
641');
641</script>
641 642 <!-- End Google Tag Manager --> 643 644 645 646 647</head> 648 649 650<body class=" 651login_page 652 app_theme_h boxed_layout"> 653 654 <!-- Google Tag Manager (noscript) -->
vendor: 81 bytes, lines 654-656
654 655 <noscript> 656 <iframe src="https://www.googletagmanager.com/ns.html?id=
656GTM-WBVF25D
vendor: 108 bytes, lines 656-659
656" 657 height="0" width="0" style="display:none;visibility:hidden"></iframe> 658 </noscript> 659
659<!-- End Google Tag Manager (noscript) --> 660 661 662<!-- Bloque principal, con el contenido de la página --> 663 664 665<!-- Header superior --> 666<header class="top-header"> 667 <div class="header-content"> 668 <img src="/static/img/logos/qvadix.png" alt="Qvadix" class="header-logo"> 669 <nav class="header-nav"> 670 <a href="#">Producto</a> 671 <a href="#" class="header-demo">Solicitar demo</a> 672 </nav> 673 </div> 674</header> 675 676<!-- Contenedor principal --> 677<div class="login-container"> 678 679 <!-- Lado izquierdo - Marketing --> 680 <div class="marketing-side"> 681 <div class="badge"> 682 <i class="material-icons">stars_2</i> 683 Plataforma centralizada de gestión educativa #1 en España 684 </div> 685 686 <h1 class="marketing-title"> 687 Powering the global <br> student journey 688 </h1> 689 690 <p class="marketing-description"> 691 Qvadix te ayuda a gestionar mejor tus estudiantes, vender más y aprovecha cada leads. 692 </p> 693 694 <!-- EstadÃsticas --> 695 <div class="stats-grid"> 696 <div class="stat-item"> 697 <div class="stat-number">+500</div> 698 <div class="stat-label">Centros educativos</div> 699 </div> 700 <div class="stat-item"> 701 <div class="stat-number">50K+</div> 702 <div class="stat-label">Estudiantes</div> 703 </div> 704 <div class="stat-item"> 705 <div class="stat-number">60%</div> 706 <div class="stat-label">Velocidad en gestión</div> 707 </div> 708 </div> 709 </div> 710 711 <!-- Lado derecho - Login --> 712 <div class="login-side"> 713 <div class="login-header"> 714 <h3>Accede a tu cuenta</h3> 715 <p>Introduce tus credenciales para continuar</p> 716 </div> 717 718 719 720 721 722 <form role="form" action="/users/login/" method="POST"> 723 <input type="hidden" name="csrfmiddlewaretoken" value="osdSNrRygQfkpLH6sLcw0kAHGsoji5vLtMaKBuY8IVhjnHwZkLdLxyD2NbbUnQIO"> 724 725 <!-- Campo Usuario --> 726 <div class="form-group"> 727 <label for="login_username">Username</label> 728 <div class="input-wrapper"> 729 <i class="material-icons input-icon">person_outline</i> 730 <input class="form-control" type="text" id="login_username" 731 placeholder="[email protected]" name="username" autocomplete="username"> 732 </div> 733 734 </div> 735 736 <!-- Campo Contraseña con botón de mostrar/ocultar --> 737 <div class="form-group"> 738 <label for="login_password">Password</label> 739 <div class="input-wrapper"> 740 <i class="material-icons input-icon">lock_outline</i> 741 <input class="form-control" type="password" id="login_password" 742 placeholder="â¢â¢â¢â¢â¢â¢â¢â¢" name="password" autocomplete="current-password"> 743 <button type="button" class="toggle-password" data-target="login_password"> 744 <i class="material-icons">visibility_off</i> 745 </button> 746 </div> 747 748 </div> 749 750 <div class="form-options"> 751 <label class="remember-me"> 752 <input type="checkbox" name="remember"> 753 <span>Recordarme</span> 754 </label> 755 <a href="#" class="forgot-link">¿Olvidaste tu contraseña?</a> 756 </div> 757 758 <button type="submit" class="btn-login"> 759 Iniciar sesión 760 </button> 761 762 </form> 763 </div> 764 765 <!-- Footer --> 766 <footer class="login-footer"> 767 <div class="footer-links"> 768 <a href="#">PolÃtica de privacidad</a> 769 <a href="#">Términos de uso</a> 770 <a href="#">Cookies</a> 771 </div> 772 773 <div class="footer-logos"> 774 <img loading="lazy" src="/static/img/logos/financiado_eu_horizontal_white.png" alt="Unión Europea"/> 775 <img loading="lazy" src="/static/img/logos/logo_PRTR_BLANCO.png" alt="PRTR"/> 776 </div> 777 778 <div class="footer-copyright"> 779 © 2026 Qvadix. Todos los derechos reservados. 780 </div> 781 </footer> 782 783</div> 784
785<script> 786 // Funcionalidad para mostrar/ocultar contraseña 787 document.querySelectorAll('.toggle-password').forEach(button => { 788 button.addEventListener('click', function() { 789 const targetId = this.getAttribute('data-target'); 790 const input = document.getElementById(targetId); 791 const icon = this.querySelector('i'); 792 793 if (input.type === 'password') { 794 input.type = 'text'; 795 icon.textContent = 'visibility'; 796 } else { 797 input.type = 'password'; 798 icon.textContent = 'visibility_off'; 799 } 800 }); 801 }); 802 803 // Prevención de doble envÃo 804 document.addEventListener('DOMContentLoaded', function() { 805 const form = document.querySelector('form'); 806 if (form) { 807 form.addEventListener('submit', function() { 808 const btn = this.querySelector('button[type="submit"]'); 809 if (btn) { 810 btn.disabled = true; 811 btn.textContent = 'Iniciando sesión...'; 812 } 813 }); 814 } 815 }); 816</script>
816 817 818 819<!-- Javascript que deben insertarse al final del documento --> 820<!-- Javascript que deben insertarse al final del documento --> 821 822 823 <!-- Primero jQuery (ya está arriba, pero asegúrate que solo hay una versión) --> 824 825 <!-- Después CKEditor --> 826
826<script src="https://cdn.ckeditor.com/4.25.1-lts/standard/ckeditor.js"></script>
826 827 828 <!-- Luego tu script de inicialización --> 829 830
830<script src="/static/assets/js/ckeditor-init.js"></script>
830 831 832 <!-- El resto de scripts --> 833
833<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
833 834
834<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script>
834 835
835<script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/js/standalone/selectize.min.js"></script>
835 836 837
837<script src="/static/assets/js/common.min.js"></script>
837 838
838<script src="/static/assets/js/uikit_custom.min.js"></script>
838 839
839<script src="/static/assets/js/altair_admin_common.min.js"></script>
839 840
840<script src="/static/assets/js/custom/dropify/src/js/dropify.js"></script>
840 841
841<script src="/static/js/django-uploader.js"></script>
841 842
842<script src="/static/js/base.js"></script>
842 843
843<script src="/static/js/libs/pnotify.custom.min.js"></script>
843 844 845 846 847<!-- Javascript en linea --> 848 849 850 851</body> 852</html> 853<!-- END templates/base.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.