syntaxis/assets/logos/main-anim/syntaxis-logo-combined-demo.html
Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

510 lines
16 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SYNTAXIS - Animación Combinada</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Inter, -apple-system, sans-serif;
background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
color: white;
padding: 20px;
}
.container {
max-width: 1200px;
width: 100%;
}
.hero {
text-align: center;
margin-bottom: 60px;
}
.hero h1 {
font-size: 3em;
margin-bottom: 10px;
background: linear-gradient(135deg, #3B7CB8 0%, #D97706 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero .tagline {
color: #94a3b8;
font-size: 1.2em;
font-weight: 300;
}
.main-demo {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 24px;
padding: 60px;
margin-bottom: 40px;
display: flex;
flex-direction: column;
align-items: center;
}
.logo-container {
background: rgba(255, 255, 255, 0.95);
border-radius: 16px;
padding: 40px;
margin-bottom: 30px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
transition: background 0.4s ease, box-shadow 0.4s ease;
}
.logo-container.dark-mode {
background: #0f172a;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
}
.controls {
display: flex;
gap: 15px;
margin-top: 20px;
}
.btn {
padding: 12px 24px;
border: 2px solid #3B7CB8;
background: rgba(59, 124, 184, 0.1);
color: #3B7CB8;
border-radius: 8px;
cursor: pointer;
font-size: 1em;
font-weight: 600;
transition: all 0.3s;
backdrop-filter: blur(10px);
}
.btn:hover {
background: #3B7CB8;
color: white;
transform: translateY(-2px);
box-shadow: 0 8px 20px rgba(59, 124, 184, 0.4);
}
.btn.active {
background: #D97706;
border-color: #D97706;
color: white;
}
.timeline {
width: 100%;
margin-top: 40px;
}
.timeline-header {
text-align: center;
margin-bottom: 30px;
}
.timeline-header h2 {
font-size: 1.8em;
margin-bottom: 10px;
}
.timeline-track {
background: rgba(255, 255, 255, 0.1);
border-radius: 12px;
padding: 30px;
position: relative;
}
.phases {
display: grid;
grid-template-columns: 1fr 1fr 2fr;
gap: 20px;
}
.phase {
background: rgba(255, 255, 255, 0.05);
border: 2px solid rgba(255, 255, 255, 0.2);
border-radius: 12px;
padding: 20px;
position: relative;
overflow: hidden;
}
.phase::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, transparent, var(--phase-color), transparent);
}
.phase.assembly {
--phase-color: #3B7CB8;
}
.phase.ambient {
--phase-color: #757773;
}
.phase.loading {
--phase-color: #D97706;
}
.phase h3 {
font-size: 1.2em;
margin-bottom: 10px;
color: var(--phase-color);
}
.phase .duration {
background: rgba(255, 255, 255, 0.1);
display: inline-block;
padding: 4px 12px;
border-radius: 12px;
font-size: 0.85em;
margin-bottom: 15px;
}
.phase .description {
color: #cbd5e1;
line-height: 1.6;
font-size: 0.95em;
}
.phase .loop-badge {
position: absolute;
top: 15px;
right: 15px;
background: #D97706;
color: white;
padding: 4px 10px;
border-radius: 12px;
font-size: 0.75em;
font-weight: 700;
}
.info-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin-top: 40px;
}
.info-card {
background: rgba(255, 255, 255, 0.05);
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
padding: 25px;
}
.info-card h3 {
font-size: 1.3em;
margin-bottom: 15px;
display: flex;
align-items: center;
gap: 10px;
}
.info-card .icon {
font-size: 1.5em;
}
.info-card ul {
list-style: none;
padding: 0;
}
.info-card li {
padding: 8px 0;
color: #cbd5e1;
line-height: 1.5;
}
.info-card li::before {
content: "→ ";
color: #D97706;
font-weight: bold;
margin-right: 8px;
}
.code-section {
background: rgba(255, 255, 255, 0.05);
border: 2px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
padding: 25px;
margin-top: 40px;
}
.code-section h3 {
margin-bottom: 15px;
font-size: 1.3em;
}
.code-block {
background: #0f172a;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 8px;
padding: 20px;
overflow-x: auto;
font-family: 'Courier New', monospace;
font-size: 0.9em;
color: #e2e8f0;
}
@media (max-width: 768px) {
.phases {
grid-template-columns: 1fr;
}
.hero h1 {
font-size: 2em;
}
.main-demo {
padding: 30px 20px;
}
}
.progress-bar {
width: 100%;
height: 6px;
background: rgba(255, 255, 255, 0.1);
border-radius: 3px;
margin-top: 30px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #3B7CB8, #757773, #D97706);
width: 0%;
animation: progress 6s ease-in-out infinite;
}
@keyframes progress {
0% { width: 0%; }
33% { width: 33%; background: #3B7CB8; }
50% { width: 50%; background: #757773; }
100% { width: 100%; background: #D97706; }
}
</style>
</head>
<body>
<div class="container">
<div class="hero">
<h1>SYNTAXIS</h1>
<p class="tagline">Systematic Orchestration, Perfectly Arranged</p>
</div>
<div class="main-demo">
<div class="logo-container" id="logoContainer">
<img id="mainLogo" src="syntaxis-logo-combined-animation.svg" width="300" alt="SYNTAXIS Combined Animation">
</div>
<div class="controls">
<button class="btn" onclick="restartAnimation()">🔄 Reiniciar Animación</button>
<button class="btn" onclick="toggleBackground()" id="bgToggleBtn">🌙 Fondo Oscuro</button>
<button class="btn" onclick="showCode()">📝 Ver Código</button>
</div>
<div style="text-align: center; margin-top: 20px; color: #94a3b8;">
<p><strong style="color: white;">Loop Infinito:</strong> Ensamblaje (4s) → Respiración (8s) → Desensamblaje (4s) → ∞</p>
<p style="font-size: 0.9em; margin-top: 5px;">Ciclo completo: 16 segundos</p>
</div>
<div class="progress-bar">
<div class="progress-fill"></div>
</div>
</div>
<div class="timeline">
<div class="timeline-header">
<h2>⏱️ Secuencia de Animación</h2>
<p style="color: #94a3b8; margin-top: 10px;">La animación se desarrolla en tres fases coordinadas</p>
</div>
<div class="timeline-track">
<div class="phases">
<div class="phase assembly">
<h3>1⃣ Ensamblaje</h3>
<div class="duration">0s - 4s</div>
<div class="loop-badge">LOOP ∞</div>
<p class="description">
Las piezas geométricas aparecen secuencialmente desde el centro con rotación 180°.
Más lento y cinematográfico (4 segundos completos). Cada pieza tiene un delay
escalonado para crear un efecto de construcción sistemática.
</p>
</div>
<div class="phase ambient">
<h3>2⃣ Respiración Ambiental</h3>
<div class="duration">4s - 12s (8 segundos)</div>
<div class="loop-badge">LOOP ∞</div>
<p class="description">
El logo permanece ensamblado y "respira" durante 8 segundos completos.
Las capas se expanden y contraen sutilmente en diferentes ritmos.
El triángulo central flota verticalmente. Efecto orgánico y vivo.
</p>
</div>
<div class="phase loading">
<h3>3⃣ Desensamblaje</h3>
<div class="duration">12s - 16s</div>
<div class="loop-badge">LOOP ∞</div>
<p class="description">
Las piezas desaparecen con rotación inversa (-180°), volviendo al punto de partida.
Después de completar el desensamblaje, el ciclo completo se reinicia automáticamente.
<strong style="color: #D97706;">Loop infinito de 16 segundos.</strong>
</p>
</div>
</div>
</div>
</div>
<div class="info-grid">
<div class="info-card">
<h3><span class="icon">🎯</span> Casos de Uso</h3>
<ul>
<li>Splash screen de aplicación</li>
<li>Landing page hero section</li>
<li>Estados de carga con marca</li>
<li>Presentaciones corporativas</li>
</ul>
</div>
<div class="info-card">
<h3><span class="icon"></span> Características</h3>
<ul>
<li>Loop infinito de 16 segundos</li>
<li>Ensamblaje cinematográfico (4s)</li>
<li>Respiración ambiental (8s)</li>
<li>Desensamblaje suave (4s)</li>
<li>Solo 5.8KB de tamaño</li>
<li>GPU-accelerated (60fps)</li>
</ul>
</div>
<div class="info-card">
<h3><span class="icon">🎨</span> Personalizable</h3>
<ul>
<li>Ajustar duración vía CSS</li>
<li>Pausar/reproducir con JS</li>
<li>Cambiar colores fácilmente</li>
<li>Funciona en todos los navegadores</li>
</ul>
</div>
</div>
<div class="code-section" id="codeSection" style="display: none;">
<h3>💻 Implementación</h3>
<div class="code-block">
<code>&lt;!-- HTML Simple --&gt;
&lt;div class="app-loading"&gt;
&lt;img src="syntaxis-logo-combined-animation.svg"
width="300"
alt="Cargando SYNTAXIS"&gt;
&lt;p&gt;Inicializando sistema...&lt;/p&gt;
&lt;/div&gt;
&lt;style&gt;
.app-loading {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
background: #0f172a;
}
.app-loading p {
color: #94a3b8;
margin-top: 20px;
font-size: 1.1em;
}
&lt;/style&gt;
&lt;!-- React Component --&gt;
&lt;script&gt;
function LoadingScreen() {
return (
&lt;div className="splash-screen"&gt;
&lt;img
src="/syntaxis-logo-combined-animation.svg"
width={300}
alt="SYNTAXIS Loading"
/&gt;
&lt;/div&gt;
);
}
&lt;/script&gt;</code>
</div>
</div>
</div>
<script>
function restartAnimation() {
const logo = document.getElementById('mainLogo');
const src = logo.src;
logo.src = '';
setTimeout(() => {
logo.src = src + '?' + new Date().getTime();
}, 10);
// Visual feedback
const btn = event.target;
btn.textContent = '✓ Reiniciado';
btn.classList.add('active');
setTimeout(() => {
btn.textContent = '🔄 Reiniciar Animación';
btn.classList.remove('active');
}, 1500);
}
function toggleBackground() {
const container = document.getElementById('logoContainer');
const btn = document.getElementById('bgToggleBtn');
container.classList.toggle('dark-mode');
if (container.classList.contains('dark-mode')) {
btn.textContent = '☀️ Fondo Claro';
btn.classList.add('active');
} else {
btn.textContent = '🌙 Fondo Oscuro';
btn.classList.remove('active');
}
}
function showCode() {
const codeSection = document.getElementById('codeSection');
const btn = event.target;
if (codeSection.style.display === 'none') {
codeSection.style.display = 'block';
btn.textContent = '✕ Ocultar Código';
btn.classList.add('active');
codeSection.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
} else {
codeSection.style.display = 'none';
btn.textContent = '📝 Ver Código';
btn.classList.remove('active');
}
}
</script>
</body>
</html>