Files
ControlPatente/frontend/index.html
2026-01-29 12:12:56 -03:00

193 lines
4.3 KiB
HTML

<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Control de Patentes - ALPR</title>
<meta name="description" content="Sistema de Control de Acceso mediante Reconocimiento Automático de Patentes" />
<!-- Loading Screen Styles (inline para carga inmediata) -->
<style>
/* Loading screen container */
#loading-screen {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #0f172a 100%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 9999;
transition: opacity 0.5s ease-out;
}
#loading-screen.fade-out {
opacity: 0;
pointer-events: none;
}
/* Logo container with glow effect */
.loading-logo {
width: 120px;
height: 120px;
margin-bottom: 30px;
animation: pulse 2s ease-in-out infinite;
}
.loading-logo img {
width: 100%;
height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 20px rgba(59, 130, 246, 0.5));
}
/* Spinner ring */
.spinner-ring {
width: 60px;
height: 60px;
border: 3px solid rgba(59, 130, 246, 0.2);
border-top-color: #3b82f6;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 24px;
}
/* Loading text */
.loading-text {
color: #94a3b8;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
font-size: 16px;
letter-spacing: 2px;
text-transform: uppercase;
margin-bottom: 8px;
}
.loading-subtext {
color: #64748b;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
font-size: 12px;
}
/* Progress bar */
.progress-container {
width: 200px;
height: 4px;
background: rgba(59, 130, 246, 0.2);
border-radius: 2px;
overflow: hidden;
margin-top: 20px;
}
.progress-bar {
height: 100%;
background: linear-gradient(90deg, #3b82f6, #8b5cf6, #3b82f6);
background-size: 200% 100%;
animation: shimmer 1.5s ease-in-out infinite;
width: 100%;
}
/* Animations */
@keyframes spin {
to {
transform: rotate(360deg);
}
}
@keyframes pulse {
0%,
100% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.05);
opacity: 0.8;
}
}
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
/* Dots animation */
.loading-dots::after {
content: '';
animation: dots 1.5s steps(4, end) infinite;
}
@keyframes dots {
0%,
20% {
content: '';
}
40% {
content: '.';
}
60% {
content: '..';
}
80%,
100% {
content: '...';
}
}
</style>
</head>
<body>
<!-- Loading Screen (se remueve cuando React carga) -->
<div id="loading-screen">
<!-- Logo personalizable - coloca tu imagen en /public/logo.png -->
<div class="loading-logo">
<img src="/logo.png" alt="Logo" onerror="this.parentElement.style.display='none'" />
</div>
<!-- Spinner -->
<div class="spinner-ring"></div>
<!-- Loading text -->
<div class="loading-text">Control de Patentes</div>
<div class="loading-subtext">Cargando sistema<span class="loading-dots"></span></div>
<!-- Progress bar -->
<div class="progress-container">
<div class="progress-bar"></div>
</div>
</div>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
<!-- Script para remover loading screen cuando React está listo -->
<script>
// Fallback: remover loading screen después de 10 segundos máximo
setTimeout(function () {
var loadingScreen = document.getElementById('loading-screen');
if (loadingScreen) {
loadingScreen.classList.add('fade-out');
setTimeout(function () {
loadingScreen.remove();
}, 500);
}
}, 10000);
</script>
</body>
</html>