syntaxis/assets/showcases/syntaxis-animated-showcase.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

1067 lines
40 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. 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 - Animated Logos Showcase</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/header-shared.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
--syntaxis-blue: #2C5F8E;
--syntaxis-gray: #757773;
--syntaxis-gold: #D97706;
--font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
body {
font-family: var(--font-primary);
background: #ffffff;
color: #1F2937;
transition: background 0.3s ease, color 0.3s ease;
padding: 20px;
}
body.dark-mode {
background: #1a1a1a;
color: #F1F5F9;
}
header {
background: var(--syntaxis-blue);
color: white;
padding: 30px;
border-radius: 8px;
margin-bottom: 40px;
text-align: center;
}
body.dark-mode header {
background: linear-gradient(135deg, var(--syntaxis-blue) 0%, #1E3A5F 100%);
}
header h1 {
font-size: 2rem;
margin-bottom: 10px;
}
header p {
opacity: 0.9;
font-size: 0.95rem;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px 40px 20px;
}
.controls {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
flex-wrap: wrap;
gap: 15px;
}
.toggle-btn {
background: var(--syntaxis-blue);
color: white;
border: none;
padding: 10px 20px;
border-radius: 6px;
cursor: pointer;
font-family: var(--font-primary);
font-weight: 500;
transition: background 0.2s;
}
.toggle-btn:hover {
background: #1E3A5F;
}
body.dark-mode .toggle-btn {
background: #60A5FA;
}
body.dark-mode .toggle-btn:hover {
background: #3B82F6;
}
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
margin-bottom: 40px;
}
.card {
background: white;
border: 2px solid #E5E7EB;
border-radius: 8px;
overflow: hidden;
transition: all 0.3s ease;
display: flex;
flex-direction: column;
height: 100%;
}
body.dark-mode .card {
background: #252525;
border-color: #404040;
}
.card:hover {
box-shadow: 0 8px 16px rgba(44, 95, 142, 0.15);
transform: translateY(-4px);
border-color: var(--syntaxis-blue);
}
.card-preview {
background: linear-gradient(135deg, #F9FAFB 0%, #F3F4F6 100%);
padding: 40px 20px;
height: 250px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
flex-shrink: 0;
}
body.dark-mode .card-preview {
background: linear-gradient(135deg, #2a2a2a 0%, #1a1a1a 100%);
}
.card-preview.dark {
background: #1a1a1a;
}
.card-preview svg {
max-width: 100%;
max-height: 200px;
}
/* Monochrome logos invert in dark mode */
body.dark-mode .card-preview svg[data*="_bn"],
body.dark-mode .card-preview svg[data*="_bn_"],
body.dark-mode .card-preview object[data*="_bn"],
body.dark-mode .card-preview object[data*="_bn_"],
body.dark-mode .main-logo-preview object[data*="_bn"],
body.dark-mode .main-logo-preview object[data*="_bn_"] {
filter: invert(1);
}
.card-info {
padding: 20px;
border-top: 1px solid #E5E7EB;
display: flex;
flex-direction: column;
flex-grow: 1;
}
body.dark-mode .card-info {
border-top-color: #404040;
}
.card-title {
font-size: 1.1rem;
font-weight: 600;
color: var(--syntaxis-blue);
margin-bottom: 8px;
}
body.dark-mode .card-title {
color: #60A5FA;
}
.card-type {
display: inline-block;
font-size: 0.7rem;
text-transform: uppercase;
font-weight: 600;
background: transparent;
color: var(--syntaxis-gold);
padding: 4px 8px;
border-radius: 3px;
margin-bottom: 10px;
}
body.dark-mode .card-type {
background: transparent;
color: #d4a574;
}
/* Category Labels (Logo galleries) */
.category-label {
display: inline-block;
font-family: 'Courier New', monospace;
font-size: 0.7rem;
text-transform: uppercase;
font-weight: 600;
letter-spacing: 0.05em;
background: transparent;
color: var(--syntaxis-gold);
padding: 0.25rem 0.5rem;
border-radius: 3px;
margin-bottom: 0.5rem;
}
.category-label.static {
background: transparent;
color: var(--syntaxis-blue);
}
.category-label.animated {
background: transparent;
color: var(--syntaxis-purple);
}
.card-description {
font-size: 0.9rem;
color: #6B7280;
line-height: 1.4;
margin-bottom: 12px;
}
body.dark-mode .card-description {
color: #9CA3AF;
}
.card-meta {
font-size: 0.85rem;
background: #F9FAFB;
padding: 8px;
border-radius: 4px;
color: #6B7280;
margin-bottom: 12px;
font-family: 'Courier New', monospace;
}
body.dark-mode .card-meta {
background: #404040;
color: #CBD5E1;
}
.card-meta-filename {
cursor: pointer;
padding: 8px;
border-radius: 4px;
transition: all 0.2s ease;
display: inline-block;
position: relative;
}
.card-meta-filename:hover {
background: rgba(44, 95, 142, 0.15);
color: #2C5F8E;
}
body.dark-mode .card-meta-filename:hover {
background: rgba(96, 165, 250, 0.15);
color: #60a5fa;
}
.card-meta-filename:hover::after {
content: "Click to copy";
position: absolute;
bottom: 100%;
left: 50%;
transform: translateX(-50%);
background: #2C5F8E;
color: white;
padding: 0.4rem 0.8rem;
border-radius: 4px;
font-size: 0.7rem;
font-weight: 500;
white-space: nowrap;
margin-bottom: 0.5rem;
font-family: 'Source Sans Pro', sans-serif;
z-index: 1000;
animation: tooltipIn 0.2s ease-out;
}
.card-meta-filename:hover::before {
content: "";
position: absolute;
bottom: 100%;
left: 50%;
transform: translateX(-50%);
border: 5px solid transparent;
border-top-color: #2C5F8E;
margin-bottom: -10px;
z-index: 1000;
}
body.dark-mode .card-meta-filename:hover::after {
background: #60a5fa;
}
body.dark-mode .card-meta-filename:hover::before {
border-top-color: #60a5fa;
}
@keyframes tooltipIn {
from {
opacity: 0;
transform: translateX(-50%) translateY(5px);
}
to {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
}
.card-actions {
display: flex;
gap: 8px;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
width: 100%;
}
.btn {
flex: 1;
min-width: 60px;
padding: 8px 12px;
border: none;
border-radius: 4px;
font-family: var(--font-primary);
font-size: 0.85rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
text-align: center;
}
.btn-restart {
flex: 0.8;
}
.btn-primary {
flex: 1.2;
}
.action-status {
font-size: 0.75rem;
color: #6B7280;
white-space: nowrap;
flex: 0 0 auto;
display: none;
}
body.dark-mode .action-status {
color: #9CA3AF;
}
.action-status.playing {
color: var(--syntaxis-gold);
font-weight: 600;
}
.btn-primary {
background: #F3F4F6;
color: var(--syntaxis-blue);
border: 2px solid var(--syntaxis-blue);
}
.btn-primary:hover {
background: #E5E7EB;
box-shadow: 0 4px 8px rgba(44, 95, 142, 0.3);
}
body.dark-mode .btn-primary {
background: #3a4555;
color: #9ab8d9;
border-color: #9ab8d9;
}
body.dark-mode .btn-primary:hover {
background: #4a5a75;
color: #b0d0f0;
border-color: #b0d0f0;
}
.btn-restart {
background: #F3F4F6;
color: var(--syntaxis-gold);
border: 2px solid var(--syntaxis-gold);
}
.btn-restart:hover {
background: #E5E7EB;
box-shadow: 0 4px 8px rgba(217, 119, 6, 0.3);
}
body.dark-mode .btn-restart {
background: #3a4555;
color: #d4a574;
border-color: #d4a574;
}
body.dark-mode .btn-restart:hover {
background: #4a5a75;
color: #e8bf8f;
border-color: #e8bf8f;
}
.btn-secondary {
background: #F3F4F6;
color: var(--syntaxis-blue);
border: 2px solid var(--syntaxis-blue);
}
body.dark-mode .btn-secondary {
background: #3a4555;
color: #8fa5be;
border-color: #8fa5be;
}
.btn-secondary:hover {
background: #E5E7EB;
box-shadow: 0 4px 8px rgba(44, 95, 142, 0.3);
}
body.dark-mode .btn-secondary:hover {
background: #4a5a75;
color: #afc5dd;
border-color: #afc5dd;
}
.btn-restart:hover {
transform: scale(1.05);
}
.animation-container {
position: relative;
}
.animation-info {
background: #DFF2F1;
border-left: 4px solid var(--syntaxis-blue);
padding: 15px;
border-radius: 4px;
margin-bottom: 30px;
font-size: 0.9rem;
}
body.dark-mode .animation-info {
background: #0F3F3F;
color: #A0F9F9;
}
.section-title {
font-size: 1.5rem;
font-weight: 700;
color: var(--syntaxis-blue);
margin-top: 40px;
margin-bottom: 20px;
border-bottom: 3px solid var(--syntaxis-gold);
padding-bottom: 10px;
}
body.dark-mode .section-title {
color: #60A5FA;
}
.info-box {
background: transparent;
padding: 15px;
border-radius: 6px;
margin-bottom: 20px;
border-left: 4px solid var(--syntaxis-blue);
color: #6B7280;
font-size: 0.9rem;
}
body.dark-mode .info-box {
background: transparent;
color: #9CA3AF;
border-left-color: #60A5FA;
}
.info-box strong {
color: #6B7280;
}
body.dark-mode .info-box strong {
color: #9CA3AF;
}
/* Scalability Test */
.scalability-container {
background: transparent;
padding: 2rem;
border-radius: 8px;
margin-bottom: 2rem;
}
.scalability-item {
text-align: center;
background: transparent;
padding: 1rem;
border-radius: 6px;
}
.scalability-icon,
.scalability-logo {
display: inline-block;
padding: 0.75rem;
background: white;
border: 2px solid #E5E7EB;
border-radius: 8px;
margin-bottom: 0.5rem;
}
body.dark-mode .scalability-icon,
body.dark-mode .scalability-logo {
background: #252525;
border-color: #404040;
}
/* Reset animation on reload */
.restart-animation {
animation: none;
}
/* Make SVG preview clickable */
.logo-preview,
.main-logo-preview {
cursor: pointer;
position: relative;
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
}
.logo-preview:hover,
.main-logo-preview:hover {
opacity: 0.85;
transition: opacity 0.2s;
}
/* Toggleable Note */
.info-note {
background: #F9FAFB;
border: 1px solid #E5E7EB;
border-left: 4px solid var(--syntaxis-blue);
padding: 1rem 1.5rem;
border-radius: 6px;
margin-bottom: 2rem;
font-size: 0.9rem;
line-height: 1.6;
display: none;
}
body.dark-mode .info-note {
background: #1E293B;
border-color: #334155;
border-left-color: #60A5FA;
color: #E5E7EB;
}
.info-note.visible {
display: block;
}
.info-note strong {
color: var(--syntaxis-blue);
}
body.dark-mode .info-note strong {
color: #60A5FA;
}
.toggle-note-btn {
background: var(--syntaxis-blue);
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 6px;
cursor: pointer;
font-family: var(--font-primary);
font-size: 0.85rem;
font-weight: 500;
transition: all 0.2s;
margin-bottom: 1.5rem;
}
.toggle-note-btn:hover {
background: #1E3A5F;
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(44, 95, 142, 0.3);
}
body.dark-mode .toggle-note-btn {
background: #3d5a7d;
border-color: #3d5a7d;
color: #9ab8d9;
}
body.dark-mode .toggle-note-btn:hover {
background: #4a6b94;
border-color: #4a6b94;
color: #b0d0f0;
}
@media (max-width: 768px) {
.gallery {
grid-template-columns: 1fr;
}
header h1 {
font-size: 1.5rem;
}
.controls {
flex-direction: column;
align-items: stretch;
}
.toggle-btn {
width: 100%;
}
}
</style>
</head>
<body>
<div class="shared-header">
<div class="header-content">
<div style="display: flex; flex-direction: column; align-items: center; gap: 0.5rem;">
<div style="display: flex; align-items: center; gap: 2rem; justify-content: center;">
<h1 class="header-title">
<div class="header-logo">
<object data="syntax_logo_a.svg" type="image/svg+xml"></object>
</div>
</h1>
<div style="text-align: left; border-left: 2px solid #9CA3AF; padding-left: 2rem;">
<h2 style="margin: 0; font-size: 1.2rem; font-weight: 600; color: #9CA3AF;">🎬 Animated Logos</h2>
<p style="margin: 0.5rem 0 0 0; font-size: 0.8rem; color: #9CA3AF;">CSS Animations & Effects</p>
</div>
</div>
<div style="text-align: center;">
<p style="margin: 0; font-size: 0.9rem; color: #9CA3AF;">Systematic Orchestration, Perfectly Arranged</p>
</div>
</div>
<div class="header-nav">
<a class="nav-btn" data-nav-button="branding" href="syntaxis-branding-showcase.html">🎨 Static Gallery</a>
<a class="nav-btn active" data-nav-button="animated" href="syntaxis-animated-showcase.html">🎬 Animated Gallery</a>
<button class="header-btn" data-toggle="dark-mode" onclick="toggleDarkMode()">🌙 Dark Mode</button>
<a href="syntaxis-palette-fonts.html" target="_blank" class="header-btn" style="text-decoration: none; display: inline-flex; align-items: center;">🎨 Palette & Fonts</a>
</div>
</div>
</div>
<div class="container">
<!-- Toggleable Note -->
<button class="toggle-note-btn" onclick="toggleInfoNote()">💡 Show Animations Note</button>
<div class="info-note" id="info-note">
<strong>💡 Quick Tips:</strong> Entry animations can be replayed with the restart button. Loop animations run continuously. Click any preview to open the SVG in a new tab.
</div>
<!-- Main Logo Showcase Section -->
<section class="main-logo-showcase">
<h2>🎯 Main Logos - Quick Access</h2>
<!-- Primary Logo Variations -->
<h3 style="margin-top: 2rem; margin-bottom: 1rem; font-size: 1.2rem;">Primary Logo Variations</h3>
<div class="main-logo-grid" style="grid-template-columns: repeat(4, 1fr);">
<!-- Full Logo Animated -->
<div class="main-logo-card">
<a href="syntax_logo_a.svg" target="_blank" class="main-logo-preview">
<object data="syntax_logo_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Horizontal Lockup</div>
<div class="main-logo-description">Complete logo with animated icon and static text. Perfect for hero sections and splash screens.</div>
<div class="main-logo-meta">syntax_logo_a.svg • 800×200px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntax_logo_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
<!-- Compact Logo Animated -->
<div class="main-logo-card">
<a href="syntaxis_logo_c_a.svg" target="_blank" class="main-logo-preview">
<object data="syntaxis_logo_c_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Compact Horizontal</div>
<div class="main-logo-description">Horizontal logo without tagline with animated icon. Ideal for toolbars and navigation.</div>
<div class="main-logo-meta">syntaxis_logo_c_a.svg • 400×100px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntaxis_logo_c_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
<!-- Vertical Stack Animated -->
<div class="main-logo-card">
<a href="syntax_logo_vertical_a.svg" target="_blank" class="main-logo-preview">
<object data="syntax_logo_vertical_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Vertical Stack</div>
<div class="main-logo-description">Animated icon stacked above text. Perfect for social profiles and mobile app headers.</div>
<div class="main-logo-meta">syntax_logo_vertical_a.svg • 250×380px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntax_logo_vertical_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
<!-- Compact Vertical Animated -->
<div class="main-logo-card">
<a href="syntax_logo_vertical_c_a.svg" target="_blank" class="main-logo-preview">
<object data="syntax_logo_vertical_c_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Compact Vertical</div>
<div class="main-logo-description">Animated vertical logo without tagline for compact spaces. Ideal for icons and app headers.</div>
<div class="main-logo-meta">syntax_logo_vertical_c_a.svg • 200×280px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntax_logo_vertical_c_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
</div>
<!-- Icon & Monogram -->
<h3 style="margin-top: 2rem; margin-bottom: 1rem; font-size: 1.2rem;">Icon & Monogram</h3>
<div class="main-logo-grid" style="grid-template-columns: repeat(2, 1fr);">
<!-- Main Icon -->
<div class="main-logo-card">
<a href="syntax_icon_a.svg" target="_blank" class="main-logo-preview" style="background: transparent;">
<object data="syntax_icon_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Main Icon</div>
<div class="main-logo-description">Animated geometric icon with assembly, breathing, and disassembly phases. Perfect for loading states.</div>
<div class="main-logo-meta">syntax_icon_a.svg • 200×200px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntax_icon_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
<!-- Favicon Animated -->
<div class="main-logo-card">
<a href="syntax_favicon_a.svg" target="_blank" class="main-logo-preview" style="background: transparent;">
<object data="syntax_favicon_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Favicon</div>
<div class="main-logo-description">Animated icon for browser tabs and bookmarks. Available in SVG, and in ICO (32×32, 16×16) and PNG formats upon request.</div>
<div class="main-logo-meta">syntax_favicon_a.svg • 200×200px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntax_favicon_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
</div>
<!-- Monochrome Versions -->
<h3 style="margin-top: 2rem; margin-bottom: 1rem; font-size: 1.2rem;">Monochrome Versions</h3>
<div class="main-logo-grid">
<!-- Horizontal Lockup - Blanco y Negro Animated -->
<div class="main-logo-card">
<a href="syntax_logo_bn_a.svg" target="_blank" class="main-logo-preview">
<object data="syntax_logo_bn_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Horizontal Lockup (B&W)</div>
<div class="main-logo-description">Complete logo in black and white with animated icon. Perfect for print-ready monochrome applications.</div>
<div class="main-logo-meta">syntax_logo_bn_a.svg • 800×200px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntax_logo_bn_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
<!-- Compact - Blanco y Negro Animated -->
<div class="main-logo-card">
<a href="syntaxis_logo_bn_c_a.svg" target="_blank" class="main-logo-preview">
<object data="syntaxis_logo_bn_c_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Compact Horizontal (B&W)</div>
<div class="main-logo-description">Horizontal logo without tagline in black and white with animated icon. Ideal for monochrome applications.</div>
<div class="main-logo-meta">syntaxis_logo_bn_c_a.svg • 400×100px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntaxis_logo_bn_c_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
<!-- Vertical Stack - Blanco y Negro Animated -->
<div class="main-logo-card">
<a href="syntax_logo_vertical_bn_a.svg" target="_blank" class="main-logo-preview">
<object data="syntax_logo_vertical_bn_a.svg" type="image/svg+xml" style="width: 100%; max-height: 180px;"></object>
</a>
<div class="main-logo-info">
<span class="main-logo-badge">ANIMATED</span>
<div class="main-logo-title">Vertical Stack (B&W)</div>
<div class="main-logo-description">Stacked layout in black and white with animated icon. Perfect for square spaces and monochrome layouts.</div>
<div class="main-logo-meta">syntax_logo_vertical_bn_a.svg • 250×380px</div>
<div class="main-logo-action">
<button class="main-logo-btn" onclick="window.open('syntax_logo_vertical_bn_a.svg', '_blank')">
🔗 Open SVG
</button>
</div>
</div>
</div>
</div>
<!-- Scalability Test -->
<h3 style="margin-top: 2rem; margin-bottom: 1rem; font-size: 1.2rem;">Scalability Test</h3>
<div class="scalability-container">
<p style="margin-bottom: 1rem; color: #9CA3AF; font-weight: 600;">Icon Scalability</p>
<p style="margin-bottom: 1.5rem; color: #9CA3AF;">The animated icon maintains clarity and proportions at various sizes. Recommended minimum: 32px.</p>
<div style="display: flex; gap: 2rem; align-items: flex-end; flex-wrap: wrap; justify-content: center; margin-bottom: 2rem;">
<div class="scalability-item">
<object data="syntax_icon_a.svg" type="image/svg+xml" class="scalability-icon" style="width: 16px; height: 16px;"></object>
<div style="font-size: 0.75rem; color: #9CA3AF;">16×16px</div>
</div>
<div class="scalability-item">
<object data="syntax_icon_a.svg" type="image/svg+xml" class="scalability-icon" style="width: 32px; height: 32px;"></object>
<div style="font-size: 0.75rem; color: #9CA3AF;">32×32px</div>
</div>
<div class="scalability-item">
<object data="syntax_icon_a.svg" type="image/svg+xml" class="scalability-icon" style="width: 64px; height: 64px;"></object>
<div style="font-size: 0.75rem; color: #9CA3AF;">64×64px</div>
</div>
<div class="scalability-item">
<object data="syntax_icon_a.svg" type="image/svg+xml" class="scalability-icon" style="width: 128px; height: 128px;"></object>
<div style="font-size: 0.75rem; color: #9CA3AF;">128×128px</div>
</div>
<div class="scalability-item">
<object data="syntax_icon_a.svg" type="image/svg+xml" class="scalability-icon" style="width: 256px; height: 256px;"></object>
<div style="font-size: 0.75rem; color: #9CA3AF;">256×256px</div>
</div>
</div>
<p style="margin-bottom: 1rem; color: #9CA3AF; font-weight: 600;">Full Logo Scalability</p>
<p style="margin-bottom: 1.5rem; color: #9CA3AF;">The horizontal full logo displays well at various aspect ratios with responsive scaling.</p>
<div style="display: flex; gap: 1.5rem; align-items: center; flex-wrap: wrap; justify-content: center;">
<div class="scalability-item">
<object data="syntax_logo_a.svg" type="image/svg+xml" class="scalability-logo" style="width: 200px; height: auto;"></object>
<div style="font-size: 0.75rem; color: #9CA3AF;">Small (200px)</div>
</div>
<div class="scalability-item">
<object data="syntax_logo_a.svg" type="image/svg+xml" class="scalability-logo" style="width: 400px; height: auto;"></object>
<div style="font-size: 0.75rem; color: #9CA3AF;">Medium (400px)</div>
</div>
</div>
</div>
</section>
<!-- Entry Animations Section -->
<h2 class="section-title">🚀 Entry Animations (One-Time)</h2>
<p style="margin-bottom: 20px; color: #6B7280;">These animations run once when the page loads. Reload (Cmd+R or Ctrl+R) to see them again.</p>
<div class="gallery" id="entryGallery">
<!-- Filled by JavaScript -->
</div>
<!-- Loop Animations Section -->
<h2 class="section-title">♾️ Loop Animations (Continuous)</h2>
<p style="margin-bottom: 20px; color: #6B7280;">These animations run continuously in an infinite loop.</p>
<div class="gallery" id="loopGallery">
<!-- Filled by JavaScript -->
</div>
<!-- Interactive Animations Section -->
<h2 class="section-title">🖱️ Interactive Animations</h2>
<p style="margin-bottom: 20px; color: #6B7280;">These animations respond to user interaction (hover, click).</p>
<div class="gallery" id="interactiveGallery">
<!-- Filled by JavaScript -->
</div>
</div>
<script>
// Toggle Info Note
function toggleInfoNote() {
const infoNote = document.getElementById('info-note');
const toggleBtn = document.querySelector('.toggle-note-btn');
infoNote.classList.toggle('visible');
if (infoNote.classList.contains('visible')) {
toggleBtn.textContent = '💡 Hide Animations Note';
} else {
toggleBtn.textContent = '💡 Show Animations Note';
}
}
const ANIMATIONS = {
entry: [
{
name: 'syntaxis-logo-icon-animated.svg',
title: 'Icon Assembly',
description: 'Pieces appear from center, rotating into position',
duration: '~1.2s (one-time)',
use: 'Splash screens, hero sections, intros',
},
{
name: 'syntaxis-logo-icon-construction.svg',
title: 'Construction Flow',
description: 'Pieces slide in from top, bottom, left, and right',
duration: '~1.4s (one-time)',
use: 'Videos, how-to sections, onboarding',
},
{
name: 'syntaxis-logo-horizontal-animated.svg',
title: 'Full Logo Animated',
description: 'Icon assembles → text appears → tagline fades in',
duration: '~1.4s (one-time)',
use: 'Web headers, intros, presentations',
},
],
loop: [
{
name: 'syntaxis-logo-icon-pulse.svg',
title: 'Pulse Effect',
description: 'Central triangle pulses and glows softly',
duration: '2s infinite loop',
use: 'Active state, CTAs, widgets',
},
{
name: 'syntaxis-logo-loading.svg',
title: 'Loading Spinner',
description: 'Diamonds orbit, squares rotate',
duration: '3s loop (orbital)',
use: 'Loading indicator, processing',
},
{
name: 'syntaxis-logo-icon-ambient.svg',
title: 'Ambient Breathing',
description: 'Subtle expansion/contraction + floating',
duration: '4-6s infinite loop',
use: 'Decorative, section headers',
},
],
interactive: [
{
name: 'syntaxis-logo-icon-hover.svg',
title: 'Hover Interactive',
description: 'Shapes grow and change color on hover',
duration: '0.3s transition',
use: 'Clickable logos, buttons, links',
},
]
};
function renderGallery(animationType, containerId) {
const container = document.getElementById(containerId);
container.innerHTML = ANIMATIONS[animationType].map((anim, index) => {
const animId = `anim-${animationType}-${index}`;
const isEntryAnimation = animationType === 'entry';
return `
<div class="card">
<div class="card-preview animation-container" id="${animId}-container">
<object data="syntax_logos_anim/${anim.name}" type="image/svg+xml" style="width: 100%; max-height: 200px;" id="${animId}-obj"></object>
</div>
<div class="card-info">
<div class="card-type">${animationType === 'entry' ? 'ENTRY' : animationType === 'loop' ? 'LOOP' : 'INTERACTIVE'}</div>
<div class="card-title">${anim.title}</div>
<div class="card-description">${anim.description}</div>
<div class="card-meta">⏱️ ${anim.duration}</div>
<div class="card-meta">💡 ${anim.use}</div>
<div class="card-meta card-meta-filename" data-filepath="syntax_logos_anim/${anim.name}">📄 ${anim.name}</div>
<div class="card-actions">
${isEntryAnimation ? `<button class="btn btn-restart" onclick="restartAnimation('${animId}', '${anim.name}')">🔄 Restart</button>` : ''}
<button class="btn btn-primary" onclick="openInNewTab('syntax_logos_anim/${anim.name}')">
Open in Tab
</button>
${isEntryAnimation ? `<div class="action-status" id="${animId}-status"></div>` : ''}
</div>
</div>
</div>
`;
}).join('');
}
function restartAnimation(animId, fileName) {
const container = document.getElementById(animId + '-container');
const obj = document.getElementById(animId + '-obj');
const status = document.getElementById(animId + '-status');
if (status) {
status.textContent = '▶️ Playing...';
status.classList.add('playing');
}
// Force SVG reload
const newObj = document.createElement('object');
newObj.setAttribute('data', `syntax_logos_anim/${fileName}?t=${Date.now()}`);
newObj.setAttribute('type', 'image/svg+xml');
newObj.setAttribute('style', 'width: 100%; max-height: 200px;');
newObj.id = animId + '-obj';
obj.parentNode.replaceChild(newObj, obj);
// Calculate duration based on file
let duration = 1200; // default
if (fileName.includes('construction')) duration = 1400;
else if (fileName.includes('horizontal')) duration = 1400;
if (status) {
setTimeout(() => {
status.textContent = '✓ Done';
status.classList.remove('playing');
}, duration);
}
}
function openInNewTab(path) {
window.open(path, '_blank');
}
document.addEventListener('DOMContentLoaded', function() {
// Render galleries
renderGallery('entry', 'entryGallery');
renderGallery('loop', 'loopGallery');
renderGallery('interactive', 'interactiveGallery');
});
</script>
<script src="assets/header-shared.js"></script>
</body>
</html>