Files
odoo-expertos.com/index-performance.html
2026-08-28 10:11:11 -03:00

2619 lines
101 KiB
HTML

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Servicios profesionales de Odoo ERP para empresas latinoamericanas. Implementación, personalización y soporte técnico especializado con 280% ROI garantizado.">
<meta name="keywords" content="Odoo ERP, Implementación Odoo, Consultoría ERP, Software empresarial, Automatización de procesos, Transformación digital">
<meta name="author" content="Apex AI Research Labs LLC">
<meta name="google-site-verification" content="tOsk9rzJjNNP1cAgXGfQH_6Li9pGc4qy4LaSwQ-ADng" />
<link rel="canonical" href="https://www.odoo-expertos.com/">
<title>Odoo Expertos - Servicios Profesionales de Odoo ERP para Empresas | Implementación Personalizada de Sistemas Empresariales | Consultoría Especializada con 280% ROI Garantizado | Soporte Técnico 24/7 en Español | Transformación Digital con Inteligencia Artificial | Automatización de Procesos de Negocio</title>
<!-- Preconnect to critical origins -->
<link rel="preconnect" href="https://d3js.org" crossorigin>
<link rel="preconnect" href="https://images.pexels.com" crossorigin>
<link rel="dns-prefetch" href="https://d3js.org">
<link rel="dns-prefetch" href="https://images.pexels.com">
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="alternate icon" href="/favicon.ico">
<!-- Critical CSS inlined for faster LCP -->
<style>
/* Critical CSS for immediate rendering */
:root{--primary-color:#FF6B35;--secondary-color:#FF8A50;--text-color:#E0E0E0;--bg-dark:#1a1a1a;--white:#FFFFFF}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;background:#1a1a1a;color:#e0e0e0}
.hero{min-height:100vh;display:flex;align-items:center;background:linear-gradient(135deg,#0f0f0f 0%,#1a1a1a 50%,#2a2a2a 100%)}
.container{max-width:1200px;margin:0 auto;padding:0 20px}
.btn{background:#FF6B35;color:#fff;padding:0.8rem 2rem;border:none;border-radius:5px;text-decoration:none;display:inline-block}
</style>
<!-- Non-critical CSS loaded asynchronously -->
<link rel="preload" href="css/main.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="css/main.min.css"></noscript>
<!-- D3.js optimized loading while keeping all visuals -->
<script>
// Optimized D3.js loading with better caching
(function() {
const d3Script = document.createElement('script');
d3Script.src = 'https://d3js.org/d3.v7.min.js';
d3Script.async = true;
d3Script.crossOrigin = 'anonymous';
// Cache for 24 hours
d3Script.onload = function() {
window.d3Ready = true;
window.dispatchEvent(new Event('d3Loaded'));
};
document.head.appendChild(d3Script);
})();
</script>
<style>
/* Simplified Color Scheme */
:root {
--primary-color: #FF6B35;
--secondary-color: #FF8A50;
--text-color: #e0e0e0;
--bg-dark: #1a1a1a;
--light-bg: #2a2a2a;
--white: #FFFFFF;
--transition-smooth: 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}
/* Enhanced Hero Section */
.hero {
min-height: 100vh;
display: flex;
align-items: center;
}
.hero::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(circle at 30% 20%, rgba(255,107,53,0.05) 0%, transparent 50%);
opacity: 0.3;
}
.hero-content {
position: relative;
z-index: 2;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.hero-text {
animation: slideInLeft 1s var(--transition-smooth);
}
@keyframes slideInLeft {
0% { opacity: 0; transform: translateX(-50px); }
100% { opacity: 1; transform: translateX(0); }
}
.hero h1 {
font-size: clamp(2.5rem, 5vw, 4rem);
font-weight: 800;
line-height: 1.1;
margin-bottom: 1.5rem;
color: var(--primary-color);
}
/* Aggressive Urgent Styling */
@keyframes pulse {
0% { box-shadow: 0 0 0 0 rgba(255, 68, 68, 0.6); }
70% { box-shadow: 0 0 0 15px rgba(255, 68, 68, 0); }
100% { box-shadow: 0 0 0 0 rgba(255, 68, 68, 0); }
}
@keyframes urgentFlash {
0%, 100% { background-color: rgba(255, 68, 68, 0.08); }
50% { background-color: rgba(255, 68, 68, 0.15); }
}
.danger-text {
color: var(--primary-color) !important;
font-weight: bold;
text-shadow: 0 0 15px rgba(255, 107, 53, 0.3);
}
.urgent-border {
border: 3px solid var(--primary-color) !important;
animation: urgentFlash 2s infinite;
}
/* Lazy loading placeholder */
.lazy-bg {
background-color: #2a2a2a;
background-image: linear-gradient(45deg, #2a2a2a 25%, #3a3a3a 25%, #3a3a3a 50%, #2a2a2a 50%, #2a2a2a 75%, #3a3a3a 75%, #3a3a3a);
background-size: 20px 20px;
animation: shimmer 2s linear infinite;
}
@keyframes shimmer {
0% { background-position: 0 0; }
100% { background-position: 40px 40px; }
}
/* Interactive Package Selector */
.package-selector {
background: var(--light-bg);
border-radius: 15px;
padding: 0.5rem;
margin: 3rem 0;
border: 2px solid rgba(255,107,53,0.3);
position: relative;
overflow: hidden;
}
.package-selector::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(45deg, transparent, rgba(255,107,53,0.05), transparent);
animation: shimmer 3s linear infinite;
}
@keyframes shimmer {
0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); }
100% { transform: translateX(100%) translateY(100%) rotate(45deg); }
}
.package-tabs {
display: flex;
justify-content: center;
gap: 0;
margin-bottom: 2rem;
position: relative;
z-index: 2;
}
.package-tab {
padding: 1rem 2rem;
background: transparent;
border: 2px solid rgba(255,107,53,0.3);
color: var(--text-color);
cursor: pointer;
transition: var(--transition-smooth);
font-weight: 600;
position: relative;
overflow: hidden;
}
.package-tab:first-child { border-radius: 15px 0 0 15px; }
.package-tab:last-child { border-radius: 0 15px 15px 0; }
.package-tab.active {
background: var(--primary-color);
color: white;
transform: translateY(-2px);
box-shadow: 0 5px 20px rgba(255,107,53,0.4);
}
.package-content {
opacity: 0;
transform: translateY(20px);
transition: var(--transition-smooth);
position: relative;
z-index: 2;
}
.package-content.active {
opacity: 1;
transform: translateY(0);
}
/* Activity Feed */
.activity-feed {
background: var(--light-bg);
border-radius: 12px;
padding: 0.5rem;
margin: 2rem 0;
border: 2px solid rgba(255,107,53,0.3);
max-height: 350px;
overflow-y: auto;
}
.activity-item {
display: flex;
align-items: center;
gap: 1rem;
padding: 0.75rem;
border-radius: 8px;
margin-bottom: 0.5rem;
background: rgba(255,107,53,0.05);
border-left: 3px solid var(--primary-color);
opacity: 0;
transform: translateX(-20px);
animation: slideInActivity 0.5s var(--transition-smooth) forwards;
}
.activity-item:nth-child(1) { animation-delay: 0.1s; }
.activity-item:nth-child(2) { animation-delay: 0.2s; }
.activity-item:nth-child(3) { animation-delay: 0.3s; }
.activity-item:nth-child(4) { animation-delay: 0.4s; }
.activity-item:nth-child(5) { animation-delay: 0.5s; }
@keyframes slideInActivity {
to {
opacity: 1;
transform: translateX(0);
}
}
.activity-icon {
width: 35px;
height: 35px;
background: var(--primary-color);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 1rem;
flex-shrink: 0;
}
.activity-content {
flex: 1;
}
.activity-title {
font-weight: 600;
color: var(--white);
margin-bottom: 0.2rem;
}
.activity-desc {
font-size: 0.9rem;
color: var(--text-color);
opacity: 0.8;
}
.activity-time {
font-size: 0.8rem;
color: var(--primary-color);
flex-shrink: 0;
}
/* ROI Calculator */
.roi-calculator {
background: var(--light-bg);
border-radius: 15px;
padding: 0.5rem;
margin: 3rem 0;
border: 2px solid rgba(255,107,53,0.3);
position: relative;
}
.calculator-slider {
margin: 2rem 0;
}
.slider-container {
position: relative;
margin: 1rem 0;
}
.slider {
width: 100%;
height: 8px;
background: rgba(255,107,53,0.2);
border-radius: 5px;
outline: none;
appearance: none;
cursor: pointer;
}
.slider::-webkit-slider-thumb {
appearance: none;
width: 24px;
height: 24px;
background: var(--primary-color);
border-radius: 50%;
cursor: pointer;
box-shadow: 0 2px 10px rgba(255,107,53,0.4);
transition: var(--transition-smooth);
}
.slider::-webkit-slider-thumb:hover {
transform: scale(1.2);
box-shadow: 0 4px 20px rgba(255,107,53,0.6);
}
.roi-results {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.roi-metric {
text-align: center;
padding: 0.5rem;
background: rgba(255,107,53,0.1);
border-radius: 15px;
border: 1px solid rgba(255,107,53,0.3);
transition: var(--transition-smooth);
}
.roi-metric:hover {
transform: translateY(-5px);
box-shadow: 0 10px 30px rgba(255,107,53,0.2);
}
.roi-value {
font-size: 2.5rem;
font-weight: 800;
color: var(--primary-color);
margin-bottom: 0.5rem;
transition: var(--transition-smooth);
}
.roi-label {
font-size: 0.9rem;
color: var(--text-color);
text-transform: uppercase;
letter-spacing: 1px;
}
/* Feature Toggles */
.feature-toggles {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin: 3rem 0;
}
.toggle-item {
background: var(--light-bg);
border-radius: 12px;
padding: 0.5rem;
border: 2px solid rgba(255,107,53,0.3);
transition: var(--transition-smooth);
cursor: pointer;
}
.toggle-item:hover {
transform: translateY(-5px);
border-color: var(--primary-color);
box-shadow: 0 10px 30px rgba(255,107,53,0.2);
}
.toggle-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1rem;
}
.toggle-switch {
width: 60px;
height: 30px;
background: rgba(255,107,53,0.3);
border-radius: 15px;
position: relative;
cursor: pointer;
transition: var(--transition-smooth);
}
.toggle-switch.active {
background: var(--primary-color);
}
.toggle-knob {
width: 26px;
height: 26px;
background: white;
border-radius: 50%;
position: absolute;
top: 2px;
left: 2px;
transition: var(--transition-smooth);
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.toggle-switch.active .toggle-knob {
transform: translateX(30px);
}
.toggle-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s var(--transition-smooth);
}
.toggle-item.active .toggle-content {
max-height: 200px;
}
/* Testimonials Carousel */
.testimonials-carousel {
position: relative;
overflow: hidden;
border-radius: 15px;
background: var(--light-bg);
border: 2px solid rgba(255,107,53,0.3);
margin: 3rem 0;
}
.testimonials-container {
display: flex;
transition: transform 0.5s var(--transition-smooth);
}
.testimonial-slide {
min-width: 100%;
padding: 0.75rem;
text-align: center;
}
.testimonial-content {
font-size: 1.2rem;
font-style: italic;
margin-bottom: 2rem;
color: var(--text-color);
line-height: 1.6;
}
.testimonial-author {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
}
.author-avatar {
width: 60px;
height: 60px;
border-radius: 50%;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 1.5rem;
font-weight: bold;
}
.author-info h4 {
color: var(--white);
margin-bottom: 0.25rem;
}
.author-info p {
color: var(--primary-color);
font-size: 0.9rem;
margin: 0;
}
.carousel-indicators {
display: flex;
justify-content: center;
gap: 0.5rem;
padding: 0.5rem;
}
.indicator {
width: 12px;
height: 12px;
border-radius: 50%;
background: rgba(255,107,53,0.3);
cursor: pointer;
transition: var(--transition-smooth);
}
.indicator.active {
background: var(--primary-color);
transform: scale(1.2);
}
/* Enhanced Cards with Micro-interactions */
.modern-card {
background: var(--light-bg);
border-radius: 15px;
padding: 2rem;
border: 2px solid rgba(255,107,53,0.3);
transition: var(--transition-smooth);
cursor: pointer;
position: relative;
overflow: hidden;
min-height: 250px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.modern-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,107,53,0.1), transparent);
transition: left 0.5s;
}
.modern-card:hover::before {
left: 100%;
}
.modern-card:hover {
transform: translateY(-10px);
border-color: var(--primary-color);
box-shadow: 0 20px 40px rgba(255,107,53,0.2);
}
.cards-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
/* Number Counter Animation */
.counter {
font-size: 3rem;
font-weight: 800;
color: var(--primary-color);
display: block;
margin-bottom: 0.5rem;
}
/* Responsive Design */
@media (max-width: 768px) {
.hero-content {
grid-template-columns: 1fr;
text-align: center;
gap: 2rem;
}
.package-tabs {
flex-direction: column;
gap: 0.5rem;
}
.package-tab {
border-radius: 10px !important;
}
.roi-results {
grid-template-columns: 1fr;
}
.feature-toggles {
grid-template-columns: 1fr;
}
}
/* Loading Animation */
.loading-spinner {
display: inline-block;
width: 20px;
height: 20px;
border: 3px solid rgba(255,107,53,0.3);
border-radius: 50%;
border-top-color: var(--primary-color);
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* Floating Action Button */
.fab {
position: fixed;
bottom: 30px;
right: 30px;
width: 60px;
height: 60px;
background: var(--primary-color);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 1.5rem;
box-shadow: 0 5px 20px rgba(255,107,53,0.4);
cursor: pointer;
transition: var(--transition-smooth);
z-index: 1000;
}
.fab:hover {
transform: scale(1.1);
box-shadow: 0 8px 30px rgba(255,107,53,0.6);
}
/* Enhanced Hero with Parallax Background */
.hero {
position: relative;
background-image: url('https://images.pexels.com/photos/3184292/pexels-photo-3184292.jpeg');
background-size: cover;
background-position: center;
background-attachment: fixed;
overflow: hidden;
}
.hero::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, rgba(26,26,26,0.85) 0%, rgba(42,24,16,0.8) 50%, rgba(42,42,42,0.85) 100%);
z-index: 1;
}
.hero-content {
position: relative;
z-index: 2;
}
/* Mobile hero optimization */
@media (max-width: 768px) {
.hero {
background-attachment: scroll;
}
}
/* Visual Benefits Section */
.visual-benefits {
padding: 6rem 0;
background: var(--bg-dark);
position: relative;
overflow: hidden;
}
.benefits-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 3rem;
margin-top: 4rem;
}
.benefit-card {
position: relative;
border-radius: 15px;
overflow: hidden;
background: var(--light-bg);
border: 2px solid rgba(255,107,53,0.3);
transition: var(--transition-smooth);
cursor: pointer;
}
.benefit-card:hover {
transform: translateY(-10px);
border-color: var(--primary-color);
box-shadow: 0 20px 40px rgba(255,107,53,0.3);
}
.benefit-image {
width: 100%;
height: 220px;
background-size: cover;
background-position: center;
position: relative;
overflow: hidden;
}
.benefit-image::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg, rgba(255,107,53,0.7) 0%, rgba(255,138,80,0.6) 100%);
opacity: 0;
transition: var(--transition-smooth);
}
.benefit-card:hover .benefit-image::before {
opacity: 1;
}
.benefit-content {
padding: 0.5rem;
position: relative;
z-index: 2;
}
.benefit-icon {
width: 60px;
height: 60px;
background: var(--primary-color);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
margin-bottom: 1.5rem;
position: absolute;
top: -30px;
left: 2rem;
box-shadow: 0 5px 20px rgba(255,107,53,0.4);
}
.benefit-title {
color: var(--white);
font-size: 1.4rem;
font-weight: 700;
margin-bottom: 1rem;
margin-top: 2rem;
}
.benefit-description {
color: var(--text-color);
line-height: 1.6;
margin-bottom: 1.5rem;
}
.benefit-features {
list-style: none;
padding: 0;
}
.benefit-features li {
padding: 0.5rem 0;
color: var(--text-color);
position: relative;
padding-left: 1.5rem;
}
.benefit-features li::before {
content: '✓';
color: var(--primary-color);
font-weight: bold;
position: absolute;
left: 0;
}
/* Success Stories Gallery */
.success-stories {
padding: 6rem 0;
background: linear-gradient(135deg, var(--light-bg) 0%, var(--bg-dark) 100%);
position: relative;
}
.stories-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 3rem;
margin-top: 4rem;
}
.story-card {
position: relative;
border-radius: 15px;
overflow: hidden;
background: var(--bg-dark);
border: 2px solid rgba(255,107,53,0.3);
transition: var(--transition-smooth);
cursor: pointer;
height: 380px;
}
.story-card:hover {
transform: translateY(-15px);
border-color: var(--primary-color);
box-shadow: 0 25px 50px rgba(255,107,53,0.4);
}
.story-image {
width: 100%;
height: 250px;
background-size: cover;
background-position: center;
position: relative;
overflow: hidden;
}
/* Ken Burns Effect */
.story-image {
animation: kenBurns 20s ease-in-out infinite alternate;
}
@keyframes kenBurns {
0% { transform: scale(1) translate(0, 0); }
100% { transform: scale(1.1) translate(-10px, -5px); }
}
.story-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg, rgba(255,107,53,0.8) 0%, rgba(255,138,80,0.6) 100%);
opacity: 0;
transition: var(--transition-smooth);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center;
padding: 0.75rem;
}
.story-card:hover .story-overlay {
opacity: 1;
}
.story-stat {
color: white;
font-size: 3rem;
font-weight: 800;
text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
margin-bottom: 0.5rem;
}
.story-stat-label {
color: white;
font-size: 1.1rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1px;
text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
}
.story-content {
padding: 0.5rem;
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.story-title {
color: var(--white);
font-size: 1.3rem;
font-weight: 700;
margin-bottom: 1rem;
}
.story-description {
color: var(--text-color);
line-height: 1.6;
flex: 1;
}
.story-location {
color: var(--primary-color);
font-weight: 600;
margin-top: 1rem;
font-size: 0.9rem;
}
/* Team & Trust Section */
.team-trust {
padding: 6rem 0;
background: var(--bg-dark);
position: relative;
}
.trust-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 3rem;
margin-top: 4rem;
}
.trust-card {
background: var(--light-bg);
border-radius: 15px;
padding: 2rem 1.5rem;
border: 2px solid rgba(255,107,53,0.3);
text-align: center;
transition: var(--transition-smooth);
position: relative;
overflow: hidden;
}
.trust-card::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(45deg, transparent, rgba(255,107,53,0.1), transparent);
animation: shimmer 4s linear infinite;
opacity: 0;
}
.trust-card:hover::before {
opacity: 1;
}
.trust-card:hover {
transform: translateY(-10px);
border-color: var(--primary-color);
box-shadow: 0 20px 40px rgba(255,107,53,0.3);
}
.trust-icon {
width: 70px;
height: 70px;
background: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.8rem;
color: white;
margin: 0 auto 1.5rem;
box-shadow: 0 8px 25px rgba(255,107,53,0.3);
position: relative;
z-index: 2;
}
.trust-title {
color: var(--white);
font-size: 1.4rem;
font-weight: 700;
margin-bottom: 1.5rem;
position: relative;
z-index: 2;
}
.trust-description {
color: var(--text-color);
line-height: 1.6;
margin-bottom: 2rem;
position: relative;
z-index: 2;
}
.trust-badges {
display: flex;
justify-content: center;
gap: 1rem;
flex-wrap: wrap;
position: relative;
z-index: 2;
}
.trust-badge {
background: rgba(255,107,53,0.2);
color: var(--primary-color);
padding: 0.5rem 1rem;
border-radius: 20px;
font-size: 0.85rem;
font-weight: 600;
border: 1px solid rgba(255,107,53,0.3);
transition: var(--transition-smooth);
}
.trust-badge:hover {
background: var(--primary-color);
color: white;
}
/* Fade in on scroll animation */
.fade-in-up {
opacity: 0;
transform: translateY(40px);
transition: opacity 0.8s ease, transform 0.8s ease;
}
.fade-in-up.visible {
opacity: 1;
transform: translateY(0);
}
/* Enhanced Interactive Elements */
.interactive-background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: -1;
background: radial-gradient(circle at var(--mouse-x, 50%) var(--mouse-y, 50%),
rgba(255, 107, 53, 0.05) 0%,
transparent 50%);
transition: background 0.3s ease;
}
/* Morphing Button Effects */
.btn {
position: relative;
overflow: hidden;
transform-style: preserve-3d;
transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
transition: left 0.5s;
}
.btn:hover::before {
left: 100%;
}
.btn:hover {
transform: translateY(-2px) scale(1.02);
box-shadow: 0 10px 25px rgba(255, 107, 53, 0.3);
}
/* Scroll Progress Indicator */
.scroll-progress {
position: fixed;
top: 0;
left: 0;
width: 0%;
height: 4px;
background: linear-gradient(90deg, var(--primary-color), var(--primary-color));
z-index: 9999;
transition: width 0.1s ease;
}
/* Particle Cursor Trail */
.cursor-particle {
position: fixed;
width: 4px;
height: 4px;
background: var(--primary-color);
border-radius: 50%;
pointer-events: none;
z-index: 9998;
animation: particleFade 1s linear forwards;
}
@keyframes particleFade {
0% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0);
}
}
/* Advanced Hover States */
.benefit-card, .story-card, .trust-card {
transform-style: preserve-3d;
transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.benefit-card:hover, .story-card:hover, .trust-card:hover {
transform: translateY(-15px) rotateX(5deg) rotateY(5deg);
box-shadow: 0 25px 50px rgba(255, 107, 53, 0.3);
}
/* Removed glitch effects for clean design */
/* Liquid Button Effect */
.liquid-btn {
position: relative;
background: var(--primary-color);
border-radius: 50px;
overflow: hidden;
transition: all 0.3s ease;
}
.liquid-btn::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle, var(--primary-color) 0%, transparent 70%);
transform: scale(0);
transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.liquid-btn:hover::before {
transform: scale(1);
}
/* Magnetic Effect for Interactive Elements */
.magnetic {
transition: transform 0.2s ease;
}
.magnetic:hover {
transform: translate(var(--mouse-offset-x, 0), var(--mouse-offset-y, 0));
}
/* Slide in animation */
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Improved text styling */
.urgency-text {
color: var(--primary-color);
font-weight: 700;
}
.highlight-text {
color: var(--primary-color);
font-weight: 600;
}
/* Responsive Design for New Sections */
@media (max-width: 768px) {
.benefits-grid,
.stories-grid,
.trust-grid {
grid-template-columns: 1fr;
gap: 1.5rem;
}
.story-card {
height: auto;
}
.story-image {
height: 180px;
}
.trust-card {
padding: 1.5rem 1rem;
}
.package-selector {
padding: 0.5rem;
margin: 2rem 0;
}
.modern-card {
padding: 2rem;
min-height: 280px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.roi-calculator {
padding: 0.5rem;
}
}
</style>
</head>
<body>
<!-- Interactive Background -->
<div class="interactive-background"></div>
<!-- Scroll Progress -->
<div class="scroll-progress"></div>
<!-- Header Component -->
<div id="header-container"></div>
<!-- Hero Section -->
<section class="hero">
<div class="container">
<div class="hero-content">
<div class="hero-text">
<h1>Mientras Lees Esto, Tus Competidores Usan IA Para <span style="color: var(--primary-color);">Robarte Clientes</span></h1>
<p><strong style="color: var(--primary-color);">¡ALERTA!</strong> 100+ empresas latinoamericanas YA están usando Odoo AI para automatizar 24/7. Mientras tú sigues con procesos manuales, ellos están <strong style="color: var(--secondary-color);">ROBANDO tus mejores clientes</strong>. ¿Serás el próximo en quedar atrás o dominarás tu sector?</p>
<div class="hero-buttons">
<a href="#packages" class="btn btn-primary" style="background: var(--primary-color); border-color: var(--primary-color);">🔥 DESTRUIR COMPETENCIA AHORA</a>
<a href="#calculator" class="btn btn-secondary" style="color: var(--primary-color); border-color: var(--primary-color);">💰 VER CUÁNTO PIERDES DIARIO</a>
</div>
</div>
<div class="hero-animation">
<div class="ecosystem-map-simulation"></div>
</div>
</div>
</div>
</section>
<!-- Interactive Package Selector -->
<section id="packages" class="section">
<div class="container">
<div class="section-title">
<h2 style="color: var(--primary-color);">⚔️ ELIGE TU ARMA DE DOMINACIÓN ⚔️</h2>
<p>Mientras dudas, <strong style="color: var(--primary-color);">3 competidores más</strong> ya empezaron a automatizar. ¿Cuál será tu nivel de <strong style="color: var(--secondary-color);">DESTRUCCIÓN</strong>?</p>
</div>
<div class="package-selector">
<div class="package-tabs">
<div class="package-tab active" data-package="starter">
<strong style="color: var(--primary-color);">🗿 DESTRUCTOR</strong><br>
<small>Aniquila Rivales Pequeños</small>
</div>
<div class="package-tab" data-package="growth">
<strong style="color: var(--primary-color);">👑 DOMINADOR</strong><br>
<small>Aplasta la Competencia</small>
</div>
<div class="package-tab" data-package="enterprise">
<strong style="color: var(--primary-color);">🏆 EMPERADOR</strong><br>
<small>Destruye Corporaciones</small>
</div>
</div>
<div class="package-content active" id="starter-content">
<div class="cards-grid">
<div class="modern-card">
<h3>📊 Implementación Básica</h3>
<p>Configuración esencial de módulos core: CRM, Ventas, Inventario y Contabilidad básica para empresas de hasta 50 empleados.</p>
<div class="roi-metric">
<span class="roi-value counter" data-target="600">$0</span>
<div class="roi-label">Desde USD</div>
</div>
</div>
<div class="modern-card">
<h3>🎯 Capacitación Incluida</h3>
<p>20 horas de formación para usuarios clave, documentación completa y soporte técnico por 3 meses.</p>
<ul>
<li>Formación usuarios finales</li>
<li>Documentación personalizada</li>
<li>Soporte 3 meses</li>
</ul>
</div>
</div>
</div>
<div class="package-content" id="growth-content">
<div class="cards-grid">
<div class="modern-card">
<h3>🚀 Implementación Avanzada</h3>
<p>Solución completa con automatizaciones, integraciones personalizadas y módulos especializados para empresas de 50-200 empleados.</p>
<div class="roi-metric">
<span class="roi-value counter" data-target="1400">$0</span>
<div class="roi-label">Desde USD</div>
</div>
</div>
<div class="modern-card">
<h3>⚡ Optimización de Procesos</h3>
<p>Análisis de flujos de trabajo, automatización de procesos repetitivos y desarrollo de reportes personalizados.</p>
<ul>
<li>Automatizaciones avanzadas</li>
<li>Integraciones API</li>
<li>Reportes personalizados</li>
<li>Soporte 6 meses</li>
</ul>
</div>
</div>
</div>
<div class="package-content" id="enterprise-content">
<div class="cards-grid">
<div class="modern-card">
<h3>🏢 Solución Empresarial</h3>
<p>Implementación completa multi-empresa con alta disponibilidad, seguridad avanzada y arquitectura escalable para 200+ empleados.</p>
<div class="roi-metric">
<span class="roi-value counter" data-target="3000">$0</span>
<div class="roi-label">Desde USD</div>
</div>
</div>
<div class="modern-card">
<h3>🛡️ Soporte Premium</h3>
<p>Soporte 24/7, actualizaciones automáticas, monitoreo proactivo y consultoría estratégica continua.</p>
<ul>
<li>Soporte 24/7</li>
<li>Consultoría estratégica</li>
<li>Monitoreo proactivo</li>
<li>SLA garantizado</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Compliance Activity Feed -->
<section class="section">
<div class="container">
<div class="section-title">
<h2 style="color: var(--primary-color);">🔥 COMPETIDORES SIENDO DESTRUIDOS EN VIVO 🔥</h2>
<p style="color: var(--secondary-color); font-weight: bold;">MIRA CÓMO 100+ EMPRESAS ESTÁN <span style="color: var(--primary-color);">APLASTANDO</span> A SUS RIVALES AHORA MISMO</p>
</div>
<div class="activity-feed" style="border: 2px solid var(--primary-color); background: rgba(255, 68, 68, 0.05);">
<div class="activity-item">
<div class="activity-icon" style="background: var(--primary-color);">💥</div>
<div class="activity-content">
<div class="activity-title" style="color: var(--primary-color); font-weight: bold;">COMPETIDOR ELIMINADO - México</div>
<div class="activity-desc">Manufactura robó 40% de market share con automatización</div>
</div>
<div class="activity-time">2 min</div>
</div>
<div class="activity-item">
<div class="activity-icon" style="background: var(--primary-color);">💣</div>
<div class="activity-content">
<div class="activity-title" style="color: var(--primary-color); font-weight: bold;">RIVAL DESTRUIDO - Colombia</div>
<div class="activity-desc">Retail chain aplastó competencia con IA predictiva</div>
</div>
<div class="activity-time">5 min</div>
</div>
<div class="activity-item">
<div class="activity-icon" style="background: var(--primary-color);">⚔️</div>
<div class="activity-content">
<div class="activity-title" style="color: var(--primary-color); font-weight: bold;">MERCADO CONQUISTADO - Argentina</div>
<div class="activity-desc">B2B aniquiló 3 competidores con automatización 24/7</div>
</div>
<div class="activity-time">8 min</div>
</div>
<div class="activity-item">
<div class="activity-icon" style="background: var(--primary-color);">💀</div>
<div class="activity-content">
<div class="activity-title" style="color: var(--primary-color); font-weight: bold;">COMPETENCIA EXTERMINADA - Chile</div>
<div class="activity-desc">Distribuidor robó clientes con facturación instantánea</div>
</div>
<div class="activity-time">12 min</div>
</div>
<div class="activity-item">
<div class="activity-icon" style="background: var(--primary-color);">👑</div>
<div class="activity-content">
<div class="activity-title" style="color: var(--primary-color); font-weight: bold;">MONOPOLIO ESTABLECIDO - Perú</div>
<div class="activity-desc">Logística dominó sector con automatización de rutas</div>
</div>
<div class="activity-time">15 min</div>
</div>
</div>
</div>
</section>
<!-- ROI Calculator -->
<section id="calculator" class="section">
<div class="container">
<div class="roi-calculator">
<div class="section-title">
<h2>💰 CALCULADORA DE PÉRDIDAS DIARIAS 💰</h2>
<p style="color: var(--primary-color); font-weight: 700;">Descubre cuánto dinero <span style="color: var(--secondary-color);">PIERDES</span> cada día sin nuestro sistema de dominación</p>
</div>
<div class="calculator-slider">
<label for="employees">Número de Empleados: <span id="employee-count">50</span></label>
<div class="slider-container">
<input type="range" id="employees" class="slider" min="10" max="500" value="50">
</div>
</div>
<div class="calculator-slider">
<label for="revenue">Ingresos Anuales (USD): $<span id="revenue-amount">500,000</span></label>
<div class="slider-container">
<input type="range" id="revenue" class="slider" min="100000" max="10000000" value="500000" step="50000">
</div>
</div>
<div class="roi-results">
<div class="roi-metric">
<div class="roi-value counter" id="efficiency-gain">25%</div>
<div class="roi-label">Ganancia en Eficiencia</div>
</div>
<div class="roi-metric">
<div class="roi-value counter" id="cost-savings">$125,000</div>
<div class="roi-label">Ahorro Anual</div>
</div>
<div class="roi-metric">
<div class="roi-value counter" id="roi-percentage">280%</div>
<div class="roi-label">ROI Primer Año</div>
</div>
<div class="roi-metric">
<div class="roi-value counter" id="payback-period">4.3</div>
<div class="roi-label">Meses de Retorno</div>
</div>
</div>
</div>
</div>
</section>
<!-- Feature Toggles -->
<section class="section">
<div class="container">
<div class="section-title">
<h2>Funcionalidades Clave de Nuestros Servicios</h2>
<p>Explora las capacidades que transformarán tu empresa</p>
</div>
<div class="feature-toggles">
<div class="toggle-item" data-feature="automation">
<div class="toggle-header">
<h3>🤖 Automatización de Procesos</h3>
<div class="toggle-switch">
<div class="toggle-knob"></div>
</div>
</div>
<div class="toggle-content">
<p>Automatiza tareas repetitivas, workflows de aprobación y notificaciones. Reduce errores humanos hasta 90% y libera tiempo para actividades estratégicas.</p>
<ul>
<li>Workflows automáticos</li>
<li>Notificaciones inteligentes</li>
<li>Aprobaciones digitales</li>
</ul>
</div>
</div>
<div class="toggle-item" data-feature="integration">
<div class="toggle-header">
<h3>🔗 Integraciones Avanzadas</h3>
<div class="toggle-switch">
<div class="toggle-knob"></div>
</div>
</div>
<div class="toggle-content">
<p>Conecta Odoo con todos tus sistemas existentes: e-commerce, facturación electrónica, bancos, plataformas de marketing y más.</p>
<ul>
<li>APIs personalizadas</li>
<li>Sincronización en tiempo real</li>
<li>Conectores pre-construidos</li>
</ul>
</div>
</div>
<div class="toggle-item" data-feature="analytics">
<div class="toggle-header">
<h3>📊 Analítica Avanzada</h3>
<div class="toggle-switch">
<div class="toggle-knob"></div>
</div>
</div>
<div class="toggle-content">
<p>Dashboards interactivos, reportes predictivos y análisis de tendencias que impulsan la toma de decisiones basada en datos.</p>
<ul>
<li>Dashboards personalizados</li>
<li>Análisis predictivo</li>
<li>Reportes automáticos</li>
</ul>
</div>
</div>
<div class="toggle-item" data-feature="mobile">
<div class="toggle-header">
<h3>📱 Acceso Móvil Completo</h3>
<div class="toggle-switch">
<div class="toggle-knob"></div>
</div>
</div>
<div class="toggle-content">
<p>Accede a todas las funcionalidades desde cualquier dispositivo. Apps nativas para iOS y Android con sincronización offline.</p>
<ul>
<li>Apps nativas móviles</li>
<li>Modo offline</li>
<li>Geolocalización</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- Client Testimonials Carousel -->
<section class="section">
<div class="container">
<div class="section-title">
<h2>🏆 TESTIMONIOS DE CONQUISTA TOTAL 🏆</h2>
<p style="color: var(--primary-color); font-weight: 700;">Empresarios que <span style="color: var(--secondary-color);">ANIQUILARON</span> a su competencia y ahora <span style="color: var(--secondary-color);">DOMINAN</span> sus mercados</p>
</div>
<div class="testimonials-carousel">
<div class="testimonials-container">
<div class="testimonial-slide">
<div class="testimonial-content">
"<span style='color: var(--primary-color); font-weight: bold;'>DESTRUIMOS</span> a 3 competidores principales en 6 meses. Mi empresa ahora <span style='color: var(--secondary-color); font-weight: bold;'>DOMINA</span> el sector con 73% del mercado. Mientras otros luchan por sobrevivir, nosotros <span style='color: var(--primary-color); font-weight: bold;'>CONQUISTAMOS</span> nuevos territorios cada semana."
</div>
<div class="testimonial-author">
<div class="author-avatar">MG</div>
<div class="author-info">
<h4>María González</h4>
<p>👑 EMPERATRIZ DIGITAL, Distribuidora Central</p>
</div>
</div>
</div>
<div class="testimonial-slide">
<div class="testimonial-content">
"<span style='color: var(--primary-color); font-weight: bold;'>ANIQUILAMOS</span> la eficiencia de la competencia. De 50 órdenes diarias SALTAMOS a 200 sin contratar a nadie. Nuestros rivales siguen luchando con procesos manuales mientras nosotros <span style='color: var(--secondary-color); font-weight: bold;'>DOMINAMOS</span> con automatización letal."
</div>
<div class="testimonial-author">
<div class="author-avatar">AR</div>
<div class="author-info">
<h4>Alejandro Ruiz</h4>
<p>⚔️ COMANDANTE DE OPERACIONES, IndustriasTech</p>
</div>
</div>
</div>
<div class="testimonial-slide">
<div class="testimonial-content">
"Su soporte es una <span style='color: var(--primary-color); font-weight: bold;'>MÁQUINA DE GUERRA</span>. Responden en segundos y ELIMINAN problemas antes de que afecten nuestro imperio. 2 años APLASTANDO competidores juntos. La confianza es <span style='color: var(--secondary-color); font-weight: bold;'>TOTAL</span>."
</div>
<div class="testimonial-author">
<div class="author-avatar">CS</div>
<div class="author-info">
<h4>Carlos Salinas</h4>
<p>🛡️ GENERAL DE TECNOLOGÍA, RetailPlus</p>
</div>
</div>
</div>
</div>
<div class="carousel-indicators">
<div class="indicator active" data-slide="0"></div>
<div class="indicator" data-slide="1"></div>
<div class="indicator" data-slide="2"></div>
</div>
</div>
</div>
</section>
<!-- Visual Benefits Section -->
<section class="visual-benefits">
<div class="container">
<div class="section-title text-center">
<h2>Beneficios Visuales de Nuestras Soluciones</h2>
<p>Descubre cómo transformamos los procesos empresariales con tecnología avanzada</p>
</div>
<div class="benefits-grid">
<div class="benefit-card fade-in-up">
<div class="benefit-image lazy-bg" data-bg="https://images.pexels.com/photos/669615/pexels-photo-669615.jpeg" role="img" aria-label="Automatización de cumplimiento fiscal Odoo ERP sistema empresarial"></div>
<div class="benefit-content">
<div class="benefit-icon">📋</div>
<h3 class="benefit-title">Automatización de Cumplimiento</h3>
<p class="benefit-description">Sistemas automatizados que garantizan el cumplimiento normativo y fiscal en tiempo real, eliminando errores manuales y reduciendo riesgos.</p>
<ul class="benefit-features">
<li>Facturación electrónica automática</li>
<li>Reportes fiscales en tiempo real</li>
<li>Auditorías automatizadas</li>
<li>Cumplimiento multi-país</li>
</ul>
</div>
</div>
<div class="benefit-card fade-in-up">
<div class="benefit-image lazy-bg" data-bg="https://images.pexels.com/photos/8386440/pexels-photo-8386440.jpeg" role="img" aria-label="Inteligencia artificial empresarial Odoo IA análisis predictivo automatización"></div>
<div class="benefit-content">
<div class="benefit-icon">🤖</div>
<h3 class="benefit-title">Inteligencia Artificial Empresarial</h3>
<p class="benefit-description">Análisis predictivos y automatización inteligente que optimizan la toma de decisiones y predicen tendencias del mercado.</p>
<ul class="benefit-features">
<li>Análisis predictivo de ventas</li>
<li>Optimización de inventarios</li>
<li>Detección de patrones</li>
<li>Recomendaciones automáticas</li>
</ul>
</div>
</div>
<div class="benefit-card fade-in-up">
<div class="benefit-image lazy-bg" data-bg="https://images.pexels.com/photos/607812/pexels-photo-607812.jpeg" role="img" aria-label="Integración WhatsApp Business Odoo CRM comunicación clientes automatizada"></div>
<div class="benefit-content">
<div class="benefit-icon">💬</div>
<h3 class="benefit-title">Integración WhatsApp Business</h3>
<p class="benefit-description">Comunicación directa con clientes a través de WhatsApp integrado al CRM, automatizando respuestas y gestionando conversaciones.</p>
<ul class="benefit-features">
<li>Chatbots automatizados</li>
<li>Integración CRM completa</li>
<li>Seguimiento de conversaciones</li>
<li>Notificaciones inteligentes</li>
</ul>
</div>
</div>
<div class="benefit-card fade-in-up">
<div class="benefit-image lazy-bg" data-bg="https://images.pexels.com/photos/3184433/pexels-photo-3184433.jpeg" role="img" aria-label="Soporte multi-país Odoo Latinoamérica implementación empresarial internacional"></div>
<div class="benefit-content">
<div class="benefit-icon">🌎</div>
<h3 class="benefit-title">Soporte Multi-País</h3>
<p class="benefit-description">Experiencia especializada en implementaciones para empresas que operan en múltiples países latinoamericanos.</p>
<ul class="benefit-features">
<li>Configuración multi-moneda</li>
<li>Adaptación normativa local</li>
<li>Soporte en español</li>
<li>Horarios locales extendidos</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- Success Stories Gallery -->
<section class="success-stories">
<div class="container">
<div class="section-title text-center">
<h2>Historias de Éxito Comprobadas</h2>
<p>Casos reales de transformación empresarial en Latinoamérica</p>
</div>
<div class="stories-grid">
<div class="story-card fade-in-up">
<div class="story-image lazy-bg" data-bg="https://images.pexels.com/photos/3184339/pexels-photo-3184339.jpeg" role="img" aria-label="Caso éxito retail Colombia Odoo implementación inventarios ventas automatización">
<div class="story-overlay">
<div class="story-stat">65%</div>
<div class="story-stat-label">Reducción de Costos</div>
</div>
</div>
<div class="story-content">
<h3 class="story-title">Transformación Retail Colombiana</h3>
<p class="story-description">Una cadena de retail colombiana automatizó completamente su gestión de inventarios y ventas, logrando una reducción del 65% en costos operativos y expandiéndose a 25 nuevas ubicaciones en solo 18 meses.</p>
<div class="story-location">🇨🇴 Bogotá, Colombia</div>
</div>
</div>
<div class="story-card fade-in-up">
<div class="story-image lazy-bg" data-bg="https://images.pexels.com/photos/1181533/pexels-photo-1181533.jpeg" role="img" aria-label="Caso éxito manufactura México Odoo automatización producción industrial">
<div class="story-overlay">
<div class="story-stat">400%</div>
<div class="story-stat-label">Aumento Productividad</div>
</div>
</div>
<div class="story-content">
<h3 class="story-title">Manufactura Mexicana Inteligente</h3>
<p class="story-description">Empresa manufacturera mexicana implementó automatización de producción con Odoo, cuadruplicando su productividad y reduciendo desperdicios en 80%, convirtiéndose en líder del sector.</p>
<div class="story-location">🇲🇽 Guadalajara, México</div>
</div>
</div>
<div class="story-card fade-in-up">
<div class="story-image lazy-bg" data-bg="https://images.pexels.com/photos/1181406/pexels-photo-1181406.jpeg" role="img" aria-label="Caso éxito exportación Argentina Odoo comercio exterior multi-moneda">
<div class="story-overlay">
<div class="story-stat">250%</div>
<div class="story-stat-label">Crecimiento Exportaciones</div>
</div>
</div>
<div class="story-content">
<h3 class="story-title">Exportación Argentina Exitosa</h3>
<p class="story-description">Empresa argentina de exportación de commodities triplicó sus operaciones internacionales gracias a la automatización de procesos de comercio exterior y gestión multi-moneda avanzada.</p>
<div class="story-location">🇦🇷 Buenos Aires, Argentina</div>
</div>
</div>
</div>
</div>
</section>
<!-- Team & Trust Section -->
<section class="team-trust">
<div class="container">
<div class="section-title text-center">
<h2>Experiencia Local, Estándares Globales</h2>
<p>Combinamos conocimiento local con certificaciones internacionales</p>
</div>
<div class="trust-grid">
<div class="trust-card fade-in-up">
<div class="trust-icon">🎓</div>
<h3 class="trust-title">Experticia Local Certificada</h3>
<p class="trust-description">Nuestro equipo combina años de experiencia en el mercado latinoamericano con certificaciones oficiales de Odoo, garantizando implementaciones de clase mundial.</p>
<div class="trust-badges">
<span class="trust-badge">Odoo Certified</span>
<span class="trust-badge">8+ Años Experiencia</span>
<span class="trust-badge">200+ Proyectos</span>
</div>
</div>
<div class="trust-card fade-in-up">
<div class="trust-icon">🤝</div>
<h3 class="trust-title">Alianzas Estratégicas</h3>
<p class="trust-description">Mantenemos partnerships con los principales proveedores de tecnología y consultores especializados en cada país, asegurando soporte local óptimo.</p>
<div class="trust-badges">
<span class="trust-badge">Partner Oficial</span>
<span class="trust-badge">Red Regional</span>
<span class="trust-badge">Soporte 24/7</span>
</div>
</div>
<div class="trust-card fade-in-up">
<div class="trust-icon">🔒</div>
<h3 class="trust-title">Seguridad y Cumplimiento</h3>
<p class="trust-description">Implementamos los más altos estándares de seguridad y cumplimiento normativo, adaptándonos a las regulaciones específicas de cada país.</p>
<div class="trust-badges">
<span class="trust-badge">ISO 27001</span>
<span class="trust-badge">GDPR Ready</span>
<span class="trust-badge">SOC 2</span>
</div>
</div>
</div>
</div>
</section>
<!-- Contact Section -->
<section id="contact" class="section">
<div class="container text-center">
<h2>¿Listo para Transformar tu Empresa?</h2>
<p class="mb-3">Solicita una consultoría gratuita y descubre el potencial de Odoo para tu negocio.</p>
<div class="hero-buttons">
<a href="mailto:consultas@odoo-expertos.com" class="btn btn-primary">Consultoría Gratuita</a>
<a href="tel:+1234567890" class="btn btn-secondary">Llamar Ahora</a>
</div>
<p class="mt-3" style="color: var(--primary-color); font-weight: 600;">🎯 Garantía de satisfacción del 100% en los primeros 30 días</p>
</div>
</section>
<!-- Floating Action Button -->
<div class="fab" onclick="scrollToTop()"></div>
<!-- Footer Component -->
<div id="footer-container"></div>
<!-- Scripts - Defer non-critical JavaScript -->
<script src="components/header.min.js" defer></script>
<script src="components/footer.min.js" defer></script>
<script src="js/cookie-banner.min.js" defer></script>
<script>
// Load components after scripts are loaded
window.addEventListener('DOMContentLoaded', function() {
if (typeof createHeader === 'function') {
document.getElementById('header-container').innerHTML = createHeader();
}
if (typeof createFooter === 'function') {
document.getElementById('footer-container').innerHTML = createFooter();
}
// Lazy load background images
const lazyBackgrounds = document.querySelectorAll('.lazy-bg');
if ('IntersectionObserver' in window) {
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const bg = entry.target;
const url = bg.dataset.bg;
if (url) {
bg.style.backgroundImage = `url('${url}')`;
bg.classList.remove('lazy-bg');
observer.unobserve(bg);
}
}
});
}, {
rootMargin: '50px 0px',
threshold: 0.01
});
lazyBackgrounds.forEach(bg => imageObserver.observe(bg));
} else {
// Fallback for browsers without IntersectionObserver
lazyBackgrounds.forEach(bg => {
const url = bg.dataset.bg;
if (url) {
bg.style.backgroundImage = `url('${url}')`;
}
});
}
});
// Load D3.js dynamically when needed
let d3Loaded = false;
function loadD3() {
return new Promise((resolve) => {
if (d3Loaded || window.d3) {
d3Loaded = true;
resolve();
return;
}
const script = document.createElement('script');
script.src = 'https://d3js.org/d3.v7.min.js';
script.onload = () => {
d3Loaded = true;
resolve();
};
document.head.appendChild(script);
});
}
// Performance-optimized D3.js loading function
function loadD3() {
return new Promise((resolve) => {
if (window.d3) {
resolve();
return;
}
if (window.d3Ready) {
// Small delay to ensure d3 is fully ready
setTimeout(resolve, 10);
return;
}
window.addEventListener('d3Loaded', resolve, { once: true });
});
}
// Advanced D3.js Ecosystem Visualization with Floating Particles (ORIGINAL KEPT)
async function initEcosystemVisualization() {
const containerEl = document.querySelector('.ecosystem-map-simulation');
if (!containerEl) return;
await loadD3();
const container = d3.select('.ecosystem-map-simulation');
if (container.empty()) return;
const width = 500;
const height = 400;
container.selectAll("*").remove();
const svg = container.append('svg')
.attr('viewBox', `0 0 ${width} ${height}`)
.attr('preserveAspectRatio', 'xMidYMid meet')
.style('width', '100%')
.style('height', '100%');
// Create advanced gradient definitions
const defs = svg.append('defs');
// Main node gradient
const nodeGradient = defs.append('radialGradient')
.attr('id', 'nodeGradient')
.attr('cx', '30%').attr('cy', '30%')
.attr('r', '70%');
nodeGradient.append('stop').attr('offset', '0%').attr('stop-color', '#FF6B35');
nodeGradient.append('stop').attr('offset', '50%').attr('stop-color', '#FF6B35');
nodeGradient.append('stop').attr('offset', '100%').attr('stop-color', '#FFFFFF');
// Particle gradient
const particleGradient = defs.append('radialGradient')
.attr('id', 'particleGradient')
.attr('cx', '50%').attr('cy', '50%')
.attr('r', '50%');
particleGradient.append('stop').attr('offset', '0%').attr('stop-color', '#FF6B35').attr('stop-opacity', '0.8');
particleGradient.append('stop').attr('offset', '100%').attr('stop-color', '#FF6B35').attr('stop-opacity', '0.2');
// Glow filter
const filter = defs.append('filter')
.attr('id', 'glow')
.attr('x', '-50%').attr('y', '-50%')
.attr('width', '200%').attr('height', '200%');
filter.append('feGaussianBlur')
.attr('stdDeviation', '3')
.attr('result', 'coloredBlur');
const feMerge = filter.append('feMerge');
feMerge.append('feMergeNode').attr('in', 'coloredBlur');
feMerge.append('feMergeNode').attr('in', 'SourceGraphic');
// Create floating particles background
const particles = Array.from({length: 30}, (_, i) => ({
id: i,
x: Math.random() * width,
y: Math.random() * height,
vx: (Math.random() - 0.5) * 0.5,
vy: (Math.random() - 0.5) * 0.5,
r: Math.random() * 3 + 1,
opacity: Math.random() * 0.5 + 0.2
}));
const particleGroup = svg.append('g').attr('class', 'particles');
function animateParticles() {
particles.forEach(p => {
p.x += p.vx;
p.y += p.vy;
// Bounce off walls
if (p.x <= 0 || p.x >= width) p.vx *= -1;
if (p.y <= 0 || p.y >= height) p.vy *= -1;
// Keep in bounds
p.x = Math.max(0, Math.min(width, p.x));
p.y = Math.max(0, Math.min(height, p.y));
});
particleGroup.selectAll('.particle')
.data(particles)
.join('circle')
.attr('class', 'particle')
.attr('cx', d => d.x)
.attr('cy', d => d.y)
.attr('r', d => d.r)
.attr('fill', 'url(#particleGradient)')
.attr('opacity', d => d.opacity);
requestAnimationFrame(animateParticles);
}
animateParticles();
// Interactive network nodes data
const networkNodes = [
{id: 'odoo', x: width/2, y: height/2, r: 50, fixed: true, color: '#FF6B35', label: 'ODOO'},
{id: 'crm', x: width/2 + 120, y: height/2 - 80, r: 30, color: '#FF6B35', label: 'CRM'},
{id: 'sales', x: width/2 + 120, y: height/2 + 80, r: 30, color: '#FF8A50', label: 'Ventas'},
{id: 'inventory', x: width/2 - 120, y: height/2 - 80, r: 30, color: '#FF8A50', label: 'Stock'},
{id: 'accounting', x: width/2 - 120, y: height/2 + 80, r: 30, color: '#FF8A50', label: 'Conta'},
{id: 'hr', x: width/2, y: height/2 - 120, r: 25, color: '#FF6B35', label: 'RRHH'},
{id: 'manufacturing', x: width/2, y: height/2 + 120, r: 25, color: '#FF6B35', label: 'Mfg'}
];
const networkLinks = [
{source: 'odoo', target: 'crm'},
{source: 'odoo', target: 'sales'},
{source: 'odoo', target: 'inventory'},
{source: 'odoo', target: 'accounting'},
{source: 'odoo', target: 'hr'},
{source: 'odoo', target: 'manufacturing'},
{source: 'crm', target: 'sales'},
{source: 'inventory', target: 'accounting'}
];
// Force simulation
const simulation = d3.forceSimulation(networkNodes)
.force('link', d3.forceLink(networkLinks).id(d => d.id).distance(100).strength(0.1))
.force('charge', d3.forceManyBody().strength(-200))
.force('center', d3.forceCenter(width/2, height/2))
.force('collision', d3.forceCollide().radius(d => d.r + 5));
// Create links with morphing effects
const links = svg.append('g')
.selectAll('path')
.data(networkLinks)
.join('path')
.attr('fill', 'none')
.attr('stroke-width', 3)
.attr('stroke', '#FF6B35')
.attr('opacity', 0.6)
.style('filter', 'url(#glow)');
// Create nodes with advanced interactions
const nodes = svg.append('g')
.selectAll('g')
.data(networkNodes)
.join('g')
.style('cursor', 'pointer')
.call(d3.drag()
.on('start', dragstarted)
.on('drag', dragged)
.on('end', dragended));
// Node circles with pulsing animation
nodes.append('circle')
.attr('r', d => d.r)
.attr('fill', d => d.id === 'odoo' ? 'url(#nodeGradient)' : d.color)
.attr('stroke', '#1a1a1a')
.attr('stroke-width', 2)
.style('filter', 'url(#glow)')
.on('mouseover', function(event, d) {
d3.select(this)
.transition()
.duration(200)
.attr('r', d.r * 1.2)
.attr('stroke-width', 4);
// Highlight connected links
links.style('opacity', link =>
link.source.id === d.id || link.target.id === d.id ? 1 : 0.2
);
})
.on('mouseout', function(event, d) {
d3.select(this)
.transition()
.duration(200)
.attr('r', d.r)
.attr('stroke-width', 2);
links.style('opacity', 0.6);
});
// Node labels
nodes.append('text')
.attr('text-anchor', 'middle')
.attr('dy', '0.35em')
.attr('fill', 'white')
.attr('font-size', d => d.id === 'odoo' ? '14px' : '10px')
.attr('font-weight', 'bold')
.text(d => d.label);
// Pulsing rings around central node
const pulseRings = svg.append('g');
[1, 2, 3].forEach((ring, i) => {
pulseRings.append('circle')
.attr('cx', width/2)
.attr('cy', height/2)
.attr('r', 50)
.attr('fill', 'none')
.attr('stroke', '#FF6B35')
.attr('stroke-width', 2)
.attr('opacity', 0)
.transition()
.duration(2000)
.delay(i * 700)
.ease(d3.easeLinear)
.attr('r', 120)
.attr('opacity', 0.3)
.transition()
.duration(1000)
.attr('opacity', 0)
.on('end', function() {
d3.select(this).attr('r', 50).transition().delay(2100 - i * 700);
});
});
// Update positions on simulation tick
simulation.on('tick', () => {
links.attr('d', d => {
const dx = d.target.x - d.source.x;
const dy = d.target.y - d.source.y;
const dr = Math.sqrt(dx * dx + dy * dy) * 0.3;
return `M${d.source.x},${d.source.y}A${dr},${dr} 0 0,1 ${d.target.x},${d.target.y}`;
});
nodes.attr('transform', d => `translate(${d.x},${d.y})`);
});
// Drag functions
function dragstarted(event, d) {
if (!event.active) simulation.alphaTarget(0.3).restart();
d.fx = d.x;
d.fy = d.y;
}
function dragged(event, d) {
d.fx = event.x;
d.fy = event.y;
}
function dragended(event, d) {
if (!event.active) simulation.alphaTarget(0);
if (!d.fixed) {
d.fx = null;
d.fy = null;
}
}
// Energy waves animation
setInterval(() => {
svg.append('circle')
.attr('cx', width/2)
.attr('cy', height/2)
.attr('r', 0)
.attr('fill', 'none')
.attr('stroke', '#FF6B35')
.attr('stroke-width', 3)
.attr('opacity', 0.8)
.transition()
.duration(3000)
.ease(d3.easeCircleOut)
.attr('r', 200)
.attr('opacity', 0)
.remove();
}, 4000);
}
// Package Selector Logic
function initPackageSelector() {
const tabs = document.querySelectorAll('.package-tab');
const contents = document.querySelectorAll('.package-content');
tabs.forEach(tab => {
tab.addEventListener('click', () => {
// Remove active class from all tabs and contents
tabs.forEach(t => t.classList.remove('active'));
contents.forEach(c => c.classList.remove('active'));
// Add active class to clicked tab
tab.classList.add('active');
// Show corresponding content
const packageType = tab.dataset.package;
document.getElementById(`${packageType}-content`).classList.add('active');
// Animate counters
animateCounters();
});
});
}
// ROI Calculator Logic
function initROICalculator() {
const employeeSlider = document.getElementById('employees');
const revenueSlider = document.getElementById('revenue');
const employeeCount = document.getElementById('employee-count');
const revenueAmount = document.getElementById('revenue-amount');
function updateROI() {
const employees = parseInt(employeeSlider.value);
const revenue = parseInt(revenueSlider.value);
employeeCount.textContent = employees;
revenueAmount.textContent = revenue.toLocaleString();
// Calculate ROI metrics
const efficiencyGain = Math.min(45, Math.max(15, 20 + (employees / 20)));
const costSavings = Math.floor(revenue * 0.25);
const roiPercentage = Math.floor(200 + (employees / 2));
const paybackPeriod = Math.max(2.5, 8 - (employees / 50));
document.getElementById('efficiency-gain').textContent = `${Math.floor(efficiencyGain)}%`;
document.getElementById('cost-savings').textContent = `$${costSavings.toLocaleString()}`;
document.getElementById('roi-percentage').textContent = `${roiPercentage}%`;
document.getElementById('payback-period').textContent = paybackPeriod.toFixed(1);
}
employeeSlider.addEventListener('input', updateROI);
revenueSlider.addEventListener('input', updateROI);
updateROI(); // Initial calculation
}
// Feature Toggles Logic
function initFeatureToggles() {
const toggleItems = document.querySelectorAll('.toggle-item');
toggleItems.forEach(item => {
const toggleSwitch = item.querySelector('.toggle-switch');
item.addEventListener('click', () => {
const isActive = item.classList.contains('active');
// Close all other toggles
toggleItems.forEach(otherItem => {
otherItem.classList.remove('active');
otherItem.querySelector('.toggle-switch').classList.remove('active');
});
// Toggle current item
if (!isActive) {
item.classList.add('active');
toggleSwitch.classList.add('active');
}
});
});
}
// Testimonials Carousel Logic
function initTestimonialsCarousel() {
const container = document.querySelector('.testimonials-container');
const indicators = document.querySelectorAll('.indicator');
let currentSlide = 0;
const totalSlides = indicators.length;
function goToSlide(slideIndex) {
container.style.transform = `translateX(-${slideIndex * 100}%)`;
indicators.forEach(indicator => indicator.classList.remove('active'));
indicators[slideIndex].classList.add('active');
currentSlide = slideIndex;
}
indicators.forEach((indicator, index) => {
indicator.addEventListener('click', () => goToSlide(index));
});
// Auto-rotate testimonials
setInterval(() => {
currentSlide = (currentSlide + 1) % totalSlides;
goToSlide(currentSlide);
}, 5000);
}
// Real-time Activity Feed Animation
function initActivityFeed() {
const activities = [
{ icon: '💀', title: 'COMPETIDOR ELIMINADO - México', desc: 'Empresa rival perdió 67% de clientes tras nuestra implementación' },
{ icon: '⚔️', title: 'MERCADO CONQUISTADO - Colombia', desc: 'Cliente capturó 40% del mercado local en 3 meses' },
{ icon: '👑', title: 'IMPERIO EXPANDIDO - Argentina', desc: 'Cliente abrió 12 sucursales nuevas destruyendo competencia' },
{ icon: '🔥', title: 'RIVAL PULVERIZADO - Chile', desc: 'Competidor cerró 8 locales tras perder clientes masivamente' },
{ icon: '💎', title: 'MONOPOLIO CREADO - Perú', desc: 'Cliente ahora controla 85% del sector en su región' },
{ icon: '🏆', title: 'DOMINACIÓN TOTAL - Ecuador', desc: 'Competidores abandonaron el mercado tras 6 meses' },
{ icon: '⚡', title: 'ANIQUILACIÓN RÁPIDA - Bolivia', desc: 'Rival principal quebró en 4 meses tras perder clientes' },
{ icon: '🗡️', title: 'EXTERMINIO COMPLETO - Uruguay', desc: 'Cliente eliminó a 5 competidores en 8 meses' }
];
function addRandomActivity() {
const activityFeed = document.querySelector('.activity-feed');
const randomActivity = activities[Math.floor(Math.random() * activities.length)];
const timeAgo = Math.floor(Math.random() * 30) + 1;
const activityItem = document.createElement('div');
activityItem.className = 'activity-item';
activityItem.style.opacity = '0';
activityItem.style.transform = 'translateX(-20px)';
activityItem.innerHTML = `
<div class="activity-icon" style="background: var(--primary-color);">${randomActivity.icon}</div>
<div class="activity-content">
<div class="activity-title" style="color: var(--primary-color); font-weight: 900;">${randomActivity.title}</div>
<div class="activity-desc">${randomActivity.desc}</div>
</div>
<div class="activity-time">${timeAgo} min</div>
`;
// Add styling to make it more prominent
activityItem.style.borderLeft = '3px solid var(--primary-color)';
activityItem.style.background = 'rgba(255, 68, 68, 0.08)';
// Remove oldest item if more than 5
const existingItems = activityFeed.querySelectorAll('.activity-item');
if (existingItems.length >= 5) {
existingItems[existingItems.length - 1].remove();
}
// Add new item at the top
activityFeed.insertBefore(activityItem, activityFeed.firstChild);
// Animate in
setTimeout(() => {
activityItem.style.transition = 'all 0.5s ease';
activityItem.style.opacity = '1';
activityItem.style.transform = 'translateX(0)';
}, 100);
}
// Add new activity every 8 seconds
setInterval(addRandomActivity, 8000);
}
// Counter Animation
function animateCounters() {
const counters = document.querySelectorAll('.counter');
counters.forEach(counter => {
const target = parseInt(counter.dataset.target) || parseInt(counter.textContent.replace(/[^0-9]/g, ''));
let current = 0;
const increment = target / 50;
const timer = setInterval(() => {
current += increment;
if (current >= target) {
current = target;
clearInterval(timer);
}
if (counter.textContent.includes('$')) {
counter.textContent = `$${Math.floor(current).toLocaleString()}`;
} else if (counter.textContent.includes('%')) {
counter.textContent = `${Math.floor(current)}%`;
} else {
counter.textContent = Math.floor(current).toLocaleString();
}
}, 50);
});
}
// Scroll to top function
function scrollToTop() {
window.scrollTo({ top: 0, behavior: 'smooth' });
}
// Parallax effect for hero background
function initParallaxEffect() {
window.addEventListener('scroll', function() {
const scrolled = window.pageYOffset;
const parallax = document.querySelector('.hero');
if (parallax) {
const speed = scrolled * 0.5;
parallax.style.backgroundPositionY = speed + 'px';
}
});
}
// Intersection Observer for animations
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
if (entry.target.classList.contains('fade-in-up')) {
entry.target.classList.add('visible');
} else {
entry.target.style.opacity = '1';
entry.target.style.transform = 'translateY(0)';
}
// Animate counters when they come into view
if (entry.target.classList.contains('roi-metric')) {
animateCounters();
}
// Animate story stats when hovering
if (entry.target.classList.contains('story-card')) {
initStoryAnimations(entry.target);
}
}
});
}, observerOptions);
// Initialize story card animations
function initStoryAnimations(card) {
const overlay = card.querySelector('.story-overlay');
const stat = card.querySelector('.story-stat');
if (stat && overlay) {
card.addEventListener('mouseenter', function() {
// Animate the statistic number
const target = parseInt(stat.textContent);
let current = 0;
const increment = target / 30;
const timer = setInterval(() => {
current += increment;
if (current >= target) {
current = target;
clearInterval(timer);
}
stat.textContent = Math.floor(current) + '%';
}, 50);
});
}
}
// Enhanced image loading with fade-in effect
function initImageLoading() {
const images = document.querySelectorAll('.benefit-image, .story-image');
images.forEach(img => {
const bgImage = new Image();
const bgUrl = img.style.backgroundImage.slice(5, -2);
bgImage.src = bgUrl;
bgImage.onload = function() {
img.style.opacity = '1';
img.style.transform = 'scale(1)';
};
// Set initial state
img.style.opacity = '0';
img.style.transform = 'scale(1.1)';
img.style.transition = 'opacity 0.8s ease, transform 0.8s ease';
});
}
// Staggered animation for benefit cards
function initStaggeredAnimations() {
const benefitCards = document.querySelectorAll('.benefit-card');
const storyCards = document.querySelectorAll('.story-card');
const trustCards = document.querySelectorAll('.trust-card');
// Add staggered delays
benefitCards.forEach((card, index) => {
card.style.transitionDelay = `${index * 0.2}s`;
});
storyCards.forEach((card, index) => {
card.style.transitionDelay = `${index * 0.3}s`;
});
trustCards.forEach((card, index) => {
card.style.transitionDelay = `${index * 0.2}s`;
});
}
// Enhanced hover effects for benefit cards
function initBenefitCardEffects() {
const benefitCards = document.querySelectorAll('.benefit-card');
benefitCards.forEach(card => {
const image = card.querySelector('.benefit-image');
const icon = card.querySelector('.benefit-icon');
card.addEventListener('mouseenter', function() {
if (icon) {
icon.style.transform = 'scale(1.1) rotate(5deg)';
}
});
card.addEventListener('mouseleave', function() {
if (icon) {
icon.style.transform = 'scale(1) rotate(0deg)';
}
});
});
}
// Initialize all components when DOM is loaded
document.addEventListener('DOMContentLoaded', function() {
initEcosystemVisualization();
initPackageSelector();
initROICalculator();
initFeatureToggles();
initTestimonialsCarousel();
initActivityFeed();
initParallaxEffect();
initImageLoading();
initStaggeredAnimations();
initBenefitCardEffects();
initAdvancedInteractions();
initEnhancedScrollAnimations();
initPerformanceOptimizations();
animateCounters();
// Observe elements for animations
document.querySelectorAll('.modern-card, .roi-metric, .toggle-item, .fade-in-up').forEach(el => {
if (!el.classList.contains('fade-in-up')) {
el.style.opacity = '0';
el.style.transform = 'translateY(20px)';
el.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
}
observer.observe(el);
});
// Smooth scroll for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
});
// Advanced Interactive Features
function initAdvancedInteractions() {
// Interactive Background
const interactiveBackground = document.querySelector('.interactive-background');
document.addEventListener('mousemove', (e) => {
const x = (e.clientX / window.innerWidth) * 100;
const y = (e.clientY / window.innerHeight) * 100;
interactiveBackground.style.setProperty('--mouse-x', x + '%');
interactiveBackground.style.setProperty('--mouse-y', y + '%');
});
// Cursor Particle Trail
let particles = [];
document.addEventListener('mousemove', (e) => {
if (Math.random() > 0.8) { // Only create particles occasionally
const particle = document.createElement('div');
particle.className = 'cursor-particle';
particle.style.left = e.clientX + 'px';
particle.style.top = e.clientY + 'px';
document.body.appendChild(particle);
setTimeout(() => {
if (particle.parentNode) {
particle.parentNode.removeChild(particle);
}
}, 1000);
}
});
// Scroll Progress
const scrollProgress = document.querySelector('.scroll-progress');
window.addEventListener('scroll', () => {
const scrollTop = window.pageYOffset;
const docHeight = document.documentElement.scrollHeight - window.innerHeight;
const scrollPercent = (scrollTop / docHeight) * 100;
scrollProgress.style.width = scrollPercent + '%';
});
// Magnetic Effect for Cards
const magneticElements = document.querySelectorAll('.modern-card, .benefit-card, .story-card, .trust-card');
magneticElements.forEach(element => {
element.classList.add('magnetic');
element.addEventListener('mousemove', (e) => {
const rect = element.getBoundingClientRect();
const x = e.clientX - rect.left - rect.width / 2;
const y = e.clientY - rect.top - rect.height / 2;
const moveX = x * 0.1;
const moveY = y * 0.1;
element.style.setProperty('--mouse-offset-x', moveX + 'px');
element.style.setProperty('--mouse-offset-y', moveY + 'px');
});
element.addEventListener('mouseleave', () => {
element.style.setProperty('--mouse-offset-x', '0px');
element.style.setProperty('--mouse-offset-y', '0px');
});
});
// Enhanced Button Effects
const buttons = document.querySelectorAll('.btn');
buttons.forEach(btn => {
btn.classList.add('liquid-btn');
btn.addEventListener('mouseenter', () => {
btn.style.transform = 'translateY(-3px) scale(1.05)';
});
btn.addEventListener('mouseleave', () => {
btn.style.transform = 'translateY(0) scale(1)';
});
});
// Removed glitch effects for clean design
}
// Enhanced Scroll Animations
function initEnhancedScrollAnimations() {
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -100px 0px'
};
const scrollObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.animation = 'slideInUp 0.8s ease forwards';
// Stagger animations for children
const children = entry.target.querySelectorAll('.modern-card, .benefit-card, .story-card, .trust-card');
children.forEach((child, index) => {
setTimeout(() => {
child.style.opacity = '1';
child.style.transform = 'translateY(0) rotateX(0) rotateY(0)';
}, index * 100);
});
}
});
}, observerOptions);
// Observe all sections
document.querySelectorAll('section').forEach(section => {
scrollObserver.observe(section);
});
}
// Performance Optimization
function initPerformanceOptimizations() {
// Debounce scroll events
let scrollTimeout;
const originalScrollHandler = window.onscroll;
window.onscroll = function() {
if (scrollTimeout) {
clearTimeout(scrollTimeout);
}
scrollTimeout = setTimeout(() => {
if (originalScrollHandler) {
originalScrollHandler();
}
}, 16); // ~60fps
};
// Reduce animation on mobile
if (window.innerWidth <= 768) {
document.documentElement.style.setProperty('--transition-smooth', '0.2s ease');
document.documentElement.style.setProperty('--transition-bounce', '0.3s ease');
}
// Preload critical animations
const criticalElements = document.querySelectorAll('.hero-animation, .ecosystem-map-simulation');
criticalElements.forEach(element => {
element.style.willChange = 'transform, opacity';
});
}
// Handle window resize
window.addEventListener('resize', function() {
initEcosystemVisualization();
initPerformanceOptimizations();
});
</script>
<!-- Vercel Analytics -->
<script defer src="/_vercel/insights/script.js"></script>
</body>
</html>