Contacto Premium | DiduContador
:root {
--primary: #8A2BE2;
--primary-dark: #6A1B9A;
--primary-light: #BA68C8;
--accent: #FF4081;
--accent-dark: #F50057;
--text-dark: #2D3748;
--text-light: #FFFFFF;
--bg-white: #FFFFFF;
--bg-light: #F8F9FF;
--border: #E2E8F0;
--success: #4CAF50;
--error: #F44336;
--warning: #FF9800;
--shadow-sm: 0 4px 6px rgba(0, 0, 0, 0.05);
--shadow-md: 0 10px 15px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 20px 25px rgba(0, 0, 0, 0.15);
--transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Poppins', sans-serif;
background-color: var(--bg-white);
color: var(--text-dark);
line-height: 1.6;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 20px;
background-image:
radial-gradient(circle at 10% 20%, rgba(138, 43, 226, 0.03) 0%, transparent 50%),
radial-gradient(circle at 90% 80%, rgba(255, 64, 129, 0.03) 0%, transparent 50%);
overflow-x: hidden;
}
.contact-container {
width: 100%;
max-width: 1000px;
background: var(--bg-white);
border-radius: 24px;
box-shadow: var(--shadow-lg);
overflow: hidden;
position: relative;
z-index: 1;
animation: cardEntrance 0.8s cubic-bezier(0.22, 1, 0.36, 1) forwards;
transform-style: preserve-3d;
perspective: 1000px;
display: grid;
grid-template-columns: 1fr 1.2fr;
}
.contact-container::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 8px;
background: linear-gradient(90deg, var(--primary), var(--accent), var(--primary-dark));
z-index: 2;
}
.contact-illustration {
background: linear-gradient(135deg, var(--primary), var(--primary-dark));
padding: 60px 40px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
overflow: hidden;
}
.contact-illustration::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background:
radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%),
url('data:image/svg+xml;utf8,');
transform: rotate(30deg);
animation: shine 15s linear infinite;
}
.illustration-content {
position: relative;
z-index: 2;
text-align: center;
color: var(--text-light);
width: 100%;
}
.illustration-content h2 {
font-size: 2.2rem;
font-weight: 700;
margin-bottom: 15px;
text-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.illustration-content p {
font-size: 1.1rem;
opacity: 0.9;
margin-bottom: 30px;
max-width: 350px;
margin-left: auto;
margin-right: auto;
}
.contact-icon {
font-size: 5rem;
margin-bottom: 30px;
color: var(--text-light);
text-shadow: 0 4px 8px rgba(0,0,0,0.1);
animation: float 6s ease-in-out infinite;
}
.contact-methods {
padding: 60px 40px;
display: flex;
flex-direction: column;
}
.section-title {
font-size: 1.8rem;
font-weight: 700;
color: var(--primary-dark);
margin-bottom: 30px;
position: relative;
display: inline-block;
}
.section-title::after {
content: '';
position: absolute;
bottom: -8px;
left: 0;
width: 50px;
height: 4px;
background: linear-gradient(90deg, var(--primary), var(--accent));
border-radius: 2px;
}
.method-grid {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
margin-bottom: 40px;
}
.method-card {
background: var(--bg-light);
border-radius: 16px;
padding: 25px;
display: flex;
align-items: center;
transition: var(--transition);
border: 1px solid var(--border);
position: relative;
overflow: hidden;
box-shadow: var(--shadow-sm);
}
.method-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 5px;
height: 100%;
background: linear-gradient(to bottom, var(--primary), var(--accent));
transition: var(--transition);
}
.method-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-md);
border-color: var(--primary-light);
}
.method-card:hover::before {
width: 100%;
opacity: 0.1;
}
.method-icon-wrapper {
width: 60px;
height: 60px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 20px;
position: relative;
overflow: hidden;
flex-shrink: 0;
background: linear-gradient(135deg, var(--primary), var(--primary-dark));
box-shadow: 0 4px 12px rgba(138, 43, 226, 0.2);
}
.method-icon-wrapper i {
font-size: 1.8rem;
color: var(--text-light);
z-index: 2;
}
.method-icon-wrapper::after {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(to bottom right, transparent, rgba(255,255,255,0.2), transparent);
transform: rotate(30deg);
transition: var(--transition);
}
.method-card:hover .method-icon-wrapper::after {
animation: shine 1.5s linear infinite;
}
.method-content {
flex-grow: 1;
}
.method-title {
font-size: 1.2rem;
font-weight: 600;
color: var(--primary-dark);
margin-bottom: 5px;
transition: var(--transition);
}
.method-description {
font-size: 0.95rem;
color: var(--text-dark);
opacity: 0.8;
margin-bottom: 10px;
}
.method-action {
display: inline-flex;
align-items: center;
padding: 8px 16px;
background: linear-gradient(135deg, var(--primary), var(--primary-dark));
color: var(--text-light);
border-radius: 8px;
font-size: 0.9rem;
font-weight: 500;
text-decoration: none;
transition: var(--transition);
border: none;
cursor: pointer;
box-shadow: 0 4px 10px rgba(138, 43, 226, 0.2);
}
.method-action i {
margin-left: 8px;
transition: var(--transition);
}
.method-action:hover {
transform: translateY(-2px);
box-shadow: 0 6px 15px rgba(138, 43, 226, 0.3);
}
.method-action:hover i {
transform: translateX(3px);
}
.contact-form {
margin-top: 30px;
}
.form-group {
margin-bottom: 20px;
position: relative;
}
.form-group label {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: var(--text-dark);
font-size: 0.95rem;
}
.form-control {
width: 100%;
padding: 14px 16px;
border: 2px solid var(--border);
border-radius: 10px;
font-family: 'Poppins', sans-serif;
transition: var(--transition);
background: var(--bg-light);
font-size: 1rem;
}
.form-control:focus {
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(138, 43, 226, 0.1);
outline: none;
background: var(--bg-white);
}
textarea.form-control {
min-height: 140px;
resize: vertical;
}
.submit-btn {
background: linear-gradient(135deg, var(--primary), var(--primary-dark));
color: var(--text-light);
border: none;
padding: 14px 28px;
border-radius: 10px;
font-weight: 600;
font-size: 1rem;
cursor: pointer;
transition: var(--transition);
display: inline-flex;
align-items: center;
justify-content: center;
width: 100%;
box-shadow: var(--shadow-sm);
position: relative;
overflow: hidden;
}
.submit-btn::after {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: 0.5s;
}
.submit-btn:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-md);
}
.submit-btn:hover::after {
left: 100%;
}
.submit-btn i {
margin-left: 10px;
transition: var(--transition);
}
.submit-btn:hover i {
transform: translateX(5px);
}
.form-message {
padding: 15px;
border-radius: 10px;
margin-bottom: 20px;
text-align: center;
display: none;
animation: fadeIn 0.5s ease-out;
font-size: 0.95rem;
}
.form-message.success {
background: rgba(76, 175, 80, 0.1);
color: var(--success);
border: 1px solid var(--success);
}
.form-message.error {
background: rgba(244, 67, 54, 0.1);
color: var(--error);
border: 1px solid var(--error);
}
.social-links {
display: flex;
justify-content: center;
gap: 15px;
margin-top: 40px;
}
.social-link {
width: 44px;
height: 44px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
color: white;
transition: var(--transition);
box-shadow: var(--shadow-sm);
position: relative;
overflow: hidden;
}
.social-link::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: 0.5s;
}
.social-link:hover {
transform: translateY(-5px) scale(1.1);
box-shadow: var(--shadow-md);
}
.social-link:hover::before {
left: 100%;
}
.social-link.whatsapp {
background: linear-gradient(135deg, #25D366, #128C7E);
}
.social-link.messenger {
background: linear-gradient(135deg, #006AFF, #00B2FF);
}
.social-link.instagram {
background: linear-gradient(135deg, #833ab4, #fd1d1d, #fcb045);
}
.social-link.email {
background: linear-gradient(135deg, #EA4335, #FBBC05);
}
/* Animaciones */
@keyframes cardEntrance {
from {
opacity: 0;
transform: translateY(30px) rotateX(15deg);
}
to {
opacity: 1;
transform: translateY(0) rotateX(0);
}
}
@keyframes shine {
0% { transform: translateX(-100%) rotate(30deg); }
100% { transform: translateX(100%) rotate(30deg); }
}
@keyframes float {
0% { transform: translateY(0px); }
50% { transform: translateY(-15px); }
100% { transform: translateY(0px); }
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
/* Efecto de partículas */
.particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: -1;
overflow: hidden;
}
.particle {
position: absolute;
background: rgba(138, 43, 226, 0.1);
border-radius: 50%;
pointer-events: none;
animation: floatParticle 15s infinite linear;
}
@keyframes floatParticle {
0% { transform: translateY(0) translateX(0); }
25% { transform: translateY(-50px) translateX(20px); }
50% { transform: translateY(0) translateX(40px); }
75% { transform: translateY(50px) translateX(20px); }
100% { transform: translateY(0) translateX(0); }
}
/* Responsive */
@media (max-width: 768px) {
.contact-container {
grid-template-columns: 1fr;
}
.contact-illustration {
padding: 40px 20px;
}
.contact-methods {
padding: 40px 20px;
}
.illustration-content h2 {
font-size: 1.8rem;
}
.section-title {
font-size: 1.5rem;
}
.method-card {
padding: 20px;
}
.method-icon-wrapper {
width: 50px;
height: 50px;
margin-right: 15px;
}
.method-icon-wrapper i {
font-size: 1.5rem;
}
}
// Efecto de partículas avanzado
function createParticles() {
const particlesContainer = document.getElementById('particles');
const particleCount = 30;
for (let i = 0; i < particleCount; i++) {
const particle = document.createElement('div');
particle.classList.add('particle');
// Tamaño y posición aleatoria
const size = Math.random() * 10 + 5;
particle.style.width = `${size}px`;
particle.style.height = `${size}px`;
particle.style.left = `${Math.random() * 100}%`;
particle.style.top = `${Math.random() * 100}%`;
// Opacidad y color aleatorio
const opacity = Math.random() * 0.3 + 0.1;
particle.style.opacity = opacity;
// Color morado con variación
const hue = 270 + Math.random() * 30 - 15; // Variación de morado
particle.style.backgroundColor = `hsla(${hue}, 80%, 60%, ${opacity})`;
// Animación personalizada
const duration = Math.random() * 20 + 10;
const delay = Math.random() * 5;
particle.style.animation = `floatParticle ${duration}s ease-in-out ${delay}s infinite`;
particlesContainer.appendChild(particle);
}
}
// Validación y envío del formulario mejorado
document.getElementById('contact-form').addEventListener('submit', function(e) {
e.preventDefault();
const form = this;
const formMessage = document.getElementById('form-message');
const submitBtn = form.querySelector('button[type="submit"]');
const originalBtnText = submitBtn.innerHTML;
// Validar campos
const name = document.getElementById('name').value.trim();
const email = document.getElementById('email').value.trim();
const subject = document.getElementById('subject').value.trim();
const message = document.getElementById('message').value.trim();
if (!name || !email || !subject || !message) {
showFormMessage('Por favor completa todos los campos requeridos', 'error');
return;
}
if (!validateEmail(email)) {
showFormMessage('Por favor ingresa un correo electrónico válido', 'error');
return;
}
// Cambiar estado del botón
submitBtn.innerHTML = 'Enviando
';
submitBtn.disabled = true;
// Simular envío con retraso
setTimeout(() => {
// Mostrar mensaje de éxito
showFormMessage(`¡Gracias por tu mensaje, ${name}! Hemos recibido tu consulta y te contactaremos pronto.`, 'success');
// Resetear formulario
form.reset();
// Restaurar botón
submitBtn.innerHTML = originalBtnText;
submitBtn.disabled = false;
// Animación de confirmación
formMessage.style.animation = 'pulse 0.5s ease';
setTimeout(() => {
formMessage.style.animation = '';
}, 500);
}, 2000);
});
function showFormMessage(message, type) {
const formMessage = document.getElementById('form-message');
formMessage.innerHTML = `
${message}
`;
formMessage.className = `form-message ${type}`;
formMessage.style.display = 'block';
// Ocultar después de 5 segundos si es éxito
if (type === 'success') {
setTimeout(() => {
formMessage.style.display = 'none';
}, 5000);
}
}
function validateEmail(email) {
const re = /^[^s@]+@[^s@]+.[^s@]+$/;
return re.test(email);
}
// Efecto hover avanzado para las tarjetas de método
document.querySelectorAll('.method-card').forEach(card => {
card.addEventListener('mouseenter', () => {
const iconWrapper = card.querySelector('.method-icon-wrapper');
iconWrapper.style.transform = 'rotate(10deg) scale(1.1)';
iconWrapper.style.boxShadow = '0 8px 20px rgba(138, 43, 226, 0.3)';
});
card.addEventListener('mouseleave', () => {
const iconWrapper = card.querySelector('.method-icon-wrapper');
iconWrapper.style.transform = '';
iconWrapper.style.boxShadow = '';
});
});
// Inicializar efectos al cargar la página
document.addEventListener('DOMContentLoaded', function() {
createParticles();
// Animación de entrada para los elementos
const elements = document.querySelectorAll('.method-card, .contact-form, .section-title');
elements.forEach((el, index) => {
el.style.opacity = '0';
el.style.transform = 'translateY(20px)';
el.style.animation = `fadeIn 0.5s ease-out ${index * 0.1 + 0.3}s forwards`;
});
});