Files
shot-crafter-calculator/src/main/resources/templates/PageResource/login.html
T
darroyo 30037bc5cb
CI / Build Native (push) Successful in 6m44s
fix: add ?v=5 cache-busting to all script tags
El error 'window.api.updateCharacterWeight is not a function' se daba
porque el browser tenía cacheada la versión vieja de api.js (que
tenía updateCharacterInventory en vez de updateCharacterWeight).

Agregar ?v=5 a los script src fuerza al browser a re-descargar el JS
cuando el URL cambia (con cada nueva versión bump n). Previene
errores 'is not a function' después de deploys que agregan/renombran
métodos.

Aplica a todos los archivos HTML que cargan JS estático.
2026-08-23 12:49:24 -04:00

65 lines
2.5 KiB
HTML

<!doctype html>
<html lang="es" data-theme="light">
<head>
<meta charset="UTF-8"/>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Calculadora de Craft de Shots — Lineage 2</title>
<link rel="stylesheet" href="/static/css/pico.min.css"/>
<link rel="stylesheet" href="/static/css/app.css"/>
</head>
<body class="login-page" x-data="authLogin()">
<article class="login-card">
<svg class="login-logo" viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg"
aria-label="Logo">
<defs>
<linearGradient id="gem" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#10b981"/>
<stop offset="100%" stop-color="#047857"/>
</linearGradient>
</defs>
<path d="M40 8 L62 28 L40 72 L18 28 Z" fill="url(#gem)" stroke="#065f46" stroke-width="1.5"/>
<path d="M40 8 L62 28 L18 28 Z" fill="rgba(255,255,255,0.15)"/>
<path d="M40 72 L62 28 L40 28 Z" fill="rgba(0,0,0,0.1)"/>
<g class="sparkle">
<circle cx="50" cy="18" r="2.5" fill="white"/>
<path d="M50 14 L51 18 L50 22 L49 18 Z M46 18 L50 17 L54 18 L50 19 Z"
fill="white" opacity="0.7"/>
</g>
</svg>
<hgroup style="text-align:center;margin-bottom:1.5rem">
<h1 style="font-size:1.5rem;margin-bottom:0.25rem">Calculadora de Craft de Shots</h1>
<p style="margin-bottom:0">Lineage 2 — Interlude / Clasico</p>
</hgroup>
<form @submit.prevent="handleSubmit">
<label>Username
<input type="text" x-model="username" autocomplete="username" autofocus
required minlength="3" maxlength="30"/>
</label>
<label>Contrasena
<input type="password" x-model="password" autocomplete="current-password"
required minlength="8"/>
</label>
<div x-show="error" x-transition class="error-msg" x-text="error"></div>
<button type="submit" :disabled="submitting">
<span x-show="!submitting">Iniciar sesion</span>
<span x-show="submitting">Procesando…</span>
</button>
</form>
<p class="login-footer">
<a href="/register" class="link-action">No tenes cuenta? Crea una</a>
</p>
</article>
<script src="/static/js/defaults.js?v=5"></script>
<script src="/static/js/api.js?v=5"></script>
<script src="/static/js/app.js?v=5"></script>
<script defer src="/static/js/alpine.min.js?v=5"></script>
</body>
</html>