2803 lines
110 KiB
HTML
2803 lines
110 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 LCP optimization -->
|
|
<style>
|
|
:root{--primary-color:#FF6B35;--secondary-color:#FF8A50;--text-color:#E0E0E0;--bg-dark:#1a1a1a;--bg-darker:#0f0f0f;--light-bg:#2a2a2a;--white:#FFFFFF;--transition:all 0.3s ease}
|
|
*{margin:0;padding:0;box-sizing:border-box}
|
|
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,sans-serif;line-height:1.6;color:var(--text-color);background-color:var(--bg-dark)}
|
|
.container{max-width:1200px;margin:0 auto;padding:0 20px}
|
|
h1,h2,h3{font-weight:700;line-height:1.2;margin-bottom:1rem;color:var(--white)}
|
|
h1{font-size:clamp(2rem,5vw,3rem)}
|
|
.hero{background:linear-gradient(135deg,var(--bg-darker) 0%,var(--bg-dark) 50%,var(--light-bg) 100%);color:var(--white);padding:4rem 0;position:relative;overflow:hidden;min-height:100vh;display:flex;align-items:center}
|
|
.hero-content{display:grid;grid-template-columns:1fr 1fr;gap:3rem;align-items:center;position:relative;z-index:2}
|
|
.btn{display:inline-block;padding:0.8rem 2rem;border-radius:5px;font-weight:600;transition:var(--transition);cursor:pointer;border:none;text-align:center;background-color:var(--primary-color);color:var(--white);text-decoration:none}
|
|
.btn:hover{background-color:var(--secondary-color);transform:translateY(-2px)}
|
|
@media (max-width:768px){.hero-content{grid-template-columns:1fr;text-align:center}}
|
|
</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 with better caching -->
|
|
<link rel="preconnect" href="https://d3js.org" crossorigin>
|
|
<link rel="dns-prefetch" href="https://d3js.org">
|
|
<script>
|
|
// Load D3.js with better caching strategy
|
|
(function() {
|
|
const d3Script = document.createElement('script');
|
|
d3Script.src = 'https://d3js.org/d3.v7.min.js';
|
|
d3Script.async = true;
|
|
d3Script.defer = true;
|
|
d3Script.setAttribute('crossorigin', 'anonymous');
|
|
// Add cache control
|
|
d3Script.onload = function() {
|
|
window.d3Loaded = true;
|
|
document.dispatchEvent(new Event('d3Ready'));
|
|
};
|
|
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; }
|
|
}
|
|
|
|
/* Performance optimized animations */
|
|
.animate-in {
|
|
animation: fadeInUp 0.6s ease-out forwards;
|
|
}
|
|
|
|
@keyframes fadeInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
/* Optimized D3.js container */
|
|
.ecosystem-map-simulation {
|
|
contain: layout style paint;
|
|
will-change: transform;
|
|
}
|
|
|
|
/* 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
|
|
// Use requestAnimationFrame to avoid forced reflows
|
|
window.addEventListener('DOMContentLoaded', function() {
|
|
// Batch DOM operations to prevent reflow
|
|
requestAnimationFrame(() => {
|
|
// Load components if available
|
|
const headerContainer = document.getElementById('header-container');
|
|
const footerContainer = document.getElementById('footer-container');
|
|
|
|
if (typeof createHeader === 'function' && headerContainer) {
|
|
headerContainer.innerHTML = createHeader();
|
|
}
|
|
if (typeof createFooter === 'function' && footerContainer) {
|
|
footerContainer.innerHTML = createFooter();
|
|
}
|
|
|
|
// Initialize lightweight visualizations
|
|
initEcosystemVisualization();
|
|
|
|
// Lazy load background images (optimized)
|
|
const lazyBackgrounds = document.querySelectorAll('.lazy-bg');
|
|
if ('IntersectionObserver' in window && lazyBackgrounds.length) {
|
|
const imageObserver = new IntersectionObserver((entries) => {
|
|
// Batch background image updates
|
|
requestAnimationFrame(() => {
|
|
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');
|
|
imageObserver.unobserve(bg);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}, {
|
|
rootMargin: '50px 0px',
|
|
threshold: 0.01
|
|
});
|
|
|
|
lazyBackgrounds.forEach(bg => imageObserver.observe(bg));
|
|
}
|
|
});
|
|
});
|
|
|
|
// Optimized D3.js visualization with performance improvements
|
|
function initEcosystemVisualization() {
|
|
// Wait for D3.js to load if not already loaded
|
|
if (!window.d3 && !window.d3Loaded) {
|
|
document.addEventListener('d3Ready', initEcosystemVisualization, { once: true });
|
|
return;
|
|
}
|
|
|
|
const container = d3.select('.ecosystem-map-simulation');
|
|
if (container.empty()) return;
|
|
|
|
// Performance optimization: Use smaller dataset and simpler animations
|
|
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%');
|
|
|
|
// Simplified data for better performance
|
|
const nodes = [
|
|
{ id: 'Odoo', group: 1, x: width/2, y: height/2, radius: 40, color: '#FF6B35' },
|
|
{ id: 'CRM', group: 2, radius: 25, color: '#FF8A50' },
|
|
{ id: 'Ventas', group: 2, radius: 25, color: '#FF8A50' },
|
|
{ id: 'Inventario', group: 2, radius: 25, color: '#FF8A50' },
|
|
{ id: 'Contabilidad', group: 2, radius: 25, color: '#FF8A50' },
|
|
{ id: 'Proyectos', group: 2, radius: 25, color: '#FF8A50' },
|
|
{ id: 'RRHH', group: 2, radius: 25, color: '#FF8A50' }
|
|
];
|
|
|
|
const links = nodes.slice(1).map(d => ({ source: 'Odoo', target: d.id }));
|
|
|
|
// Simplified force simulation for better performance
|
|
const simulation = d3.forceSimulation(nodes)
|
|
.force('link', d3.forceLink(links).id(d => d.id).distance(100))
|
|
.force('charge', d3.forceManyBody().strength(-300))
|
|
.force('center', d3.forceCenter(width / 2, height / 2))
|
|
.force('collision', d3.forceCollide().radius(d => d.radius + 5));
|
|
|
|
// Create links with simple styling
|
|
const link = svg.append('g')
|
|
.selectAll('line')
|
|
.data(links)
|
|
.enter().append('line')
|
|
.attr('stroke', '#FF6B35')
|
|
.attr('stroke-opacity', 0.6)
|
|
.attr('stroke-width', 2);
|
|
|
|
// Create nodes with optimized rendering
|
|
const node = svg.append('g')
|
|
.selectAll('g')
|
|
.data(nodes)
|
|
.enter().append('g')
|
|
.call(d3.drag()
|
|
.on('start', dragstarted)
|
|
.on('drag', dragged)
|
|
.on('end', dragended));
|
|
|
|
node.append('circle')
|
|
.attr('r', d => d.radius)
|
|
.attr('fill', d => d.color)
|
|
.attr('stroke', '#fff')
|
|
.attr('stroke-width', 2);
|
|
|
|
node.append('text')
|
|
.text(d => d.id)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('dy', 5)
|
|
.attr('fill', '#fff')
|
|
.attr('font-size', '12px')
|
|
.attr('font-weight', 'bold');
|
|
|
|
// Optimized simulation update
|
|
simulation.on('tick', () => {
|
|
requestAnimationFrame(() => {
|
|
link
|
|
.attr('x1', d => d.source.x)
|
|
.attr('y1', d => d.source.y)
|
|
.attr('x2', d => d.target.x)
|
|
.attr('y2', d => d.target.y);
|
|
|
|
node.attr('transform', d => `translate(${d.x},${d.y})`);
|
|
});
|
|
});
|
|
|
|
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);
|
|
d.fx = null;
|
|
d.fy = null;
|
|
}
|
|
|
|
// Stop simulation after 3 seconds to save CPU
|
|
setTimeout(() => {
|
|
simulation.stop();
|
|
}, 3000);
|
|
}
|
|
|
|
// Optimized functions that maintain visual appeal but improve performance
|
|
function initPackageSelector() {
|
|
const tabs = document.querySelectorAll('.package-tab');
|
|
const contents = document.querySelectorAll('.package-content');
|
|
|
|
tabs.forEach(tab => {
|
|
tab.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
|
|
// Use requestAnimationFrame for smooth transitions
|
|
requestAnimationFrame(() => {
|
|
tabs.forEach(t => t.classList.remove('active'));
|
|
contents.forEach(c => c.classList.remove('active'));
|
|
|
|
tab.classList.add('active');
|
|
const target = document.getElementById(tab.dataset.tab);
|
|
if (target) target.classList.add('active');
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function initROICalculator() {
|
|
const employeeSlider = document.getElementById('employees');
|
|
const revenueSlider = document.getElementById('revenue');
|
|
|
|
if (!employeeSlider || !revenueSlider) return;
|
|
|
|
const employeeCount = document.getElementById('employee-count');
|
|
const revenueAmount = document.getElementById('revenue-amount');
|
|
const monthlyPrice = document.getElementById('monthly-price');
|
|
const monthlySavings = document.getElementById('monthly-savings');
|
|
const annualSavings = document.getElementById('annual-savings');
|
|
const roiPercentage = document.getElementById('roi-percentage');
|
|
|
|
// Optimized calculation with debouncing
|
|
let calculationTimeout;
|
|
|
|
function calculateROI() {
|
|
clearTimeout(calculationTimeout);
|
|
calculationTimeout = setTimeout(() => {
|
|
const employees = parseInt(employeeSlider.value);
|
|
const revenue = parseInt(revenueSlider.value);
|
|
|
|
const basePrice = Math.min(employees * 25, 1000);
|
|
const savings = revenue * 0.15;
|
|
const annual = savings * 12;
|
|
const roi = ((annual - (basePrice * 12)) / (basePrice * 12)) * 100;
|
|
|
|
// Batch DOM updates
|
|
requestAnimationFrame(() => {
|
|
if (employeeCount) employeeCount.textContent = employees;
|
|
if (revenueAmount) revenueAmount.textContent = `$${revenue.toLocaleString()}`;
|
|
if (monthlyPrice) monthlyPrice.textContent = `$${basePrice}`;
|
|
if (monthlySavings) monthlySavings.textContent = `$${Math.round(savings).toLocaleString()}`;
|
|
if (annualSavings) annualSavings.textContent = `$${Math.round(annual).toLocaleString()}`;
|
|
if (roiPercentage) roiPercentage.textContent = `${Math.round(roi)}%`;
|
|
});
|
|
}, 100); // Debounce for better performance
|
|
}
|
|
|
|
employeeSlider.addEventListener('input', calculateROI);
|
|
revenueSlider.addEventListener('input', calculateROI);
|
|
calculateROI(); // Initial calculation
|
|
}
|
|
|
|
function initPerformanceOptimizations() {
|
|
// Intersection Observer for lazy loading animations
|
|
if ('IntersectionObserver' in window) {
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('animate-in');
|
|
observer.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, {
|
|
threshold: 0.1,
|
|
rootMargin: '0px 0px -50px 0px'
|
|
});
|
|
|
|
// Observe elements that should animate on scroll
|
|
document.querySelectorAll('.card, .feature-item, .benefit-card').forEach(el => {
|
|
observer.observe(el);
|
|
});
|
|
}
|
|
}
|
|
.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> |