init commit
This commit is contained in:
400
.history/views/index-new_20251019174028.ejs
Normal file
400
.history/views/index-new_20251019174028.ejs
Normal file
@@ -0,0 +1,400 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="<%= locale %>" class="<%= theme === 'dark' ? 'dark' : '' %>">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><%- __(title || 'meta.title') %></title>
|
||||
|
||||
<!-- SEO Meta Tags -->
|
||||
<meta name="description" content="<%- __('meta.description') %>">
|
||||
<meta name="keywords" content="<%- __('meta.keywords') %>">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:title" content="<%- __('meta.title') %>">
|
||||
<meta property="og:description" content="<%- __('meta.description') %>">
|
||||
<meta property="og:type" content="website">
|
||||
|
||||
<!-- PWA -->
|
||||
<meta name="theme-color" content="#3B82F6">
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<link rel="apple-touch-icon" href="/images/icons/icon-192x192.png">
|
||||
|
||||
<!-- Styles -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
||||
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
|
||||
<link href="/css/main.css" rel="stylesheet">
|
||||
<link href="/css/fixes.css" rel="stylesheet">
|
||||
<link href="/css/dark-theme.css" rel="stylesheet">
|
||||
</head>
|
||||
<body class="font-sans dark:bg-gray-900 dark:text-gray-100">
|
||||
<%- include('partials/navigation') %>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<section class="relative bg-gradient-to-br from-blue-900 via-purple-900 to-indigo-900 dark:from-gray-900 dark:via-blue-900 dark:to-purple-900 min-h-screen flex items-center overflow-hidden hero-section">
|
||||
<div class="absolute inset-0 bg-black opacity-50 dark:opacity-70"></div>
|
||||
<div class="absolute inset-0 bg-gradient-to-r from-blue-600/20 to-purple-600/20"></div>
|
||||
|
||||
<!-- Animated Background Elements -->
|
||||
<div class="absolute inset-0 overflow-hidden">
|
||||
<div class="absolute -top-40 -right-32 w-80 h-80 bg-purple-500 dark:bg-purple-400 rounded-full mix-blend-multiply filter blur-xl opacity-70 animate-blob"></div>
|
||||
<div class="absolute -bottom-40 -left-32 w-80 h-80 bg-blue-500 dark:bg-blue-400 rounded-full mix-blend-multiply filter blur-xl opacity-70 animate-blob animation-delay-2000"></div>
|
||||
<div class="absolute top-40 left-40 w-80 h-80 bg-indigo-500 dark:bg-indigo-400 rounded-full mix-blend-multiply filter blur-xl opacity-70 animate-blob animation-delay-4000"></div>
|
||||
</div>
|
||||
|
||||
<div class="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-24">
|
||||
<div class="text-center">
|
||||
<h1 class="text-5xl md:text-7xl font-bold text-white mb-6 leading-tight" data-aos="fade-up">
|
||||
<%- __('hero.title.smart') %>
|
||||
<span class="text-transparent bg-clip-text bg-gradient-to-r from-blue-400 to-purple-400"><%- __('hero.title.solutions') %></span>
|
||||
</h1>
|
||||
<p class="text-xl md:text-2xl text-gray-300 dark:text-gray-200 mb-8 max-w-3xl mx-auto" data-aos="fade-up" data-aos-delay="200">
|
||||
<%- __('hero.subtitle') %>
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center items-center" data-aos="fade-up" data-aos-delay="400">
|
||||
<a href="/contact" class="btn-primary bg-gradient-to-r from-blue-500 to-purple-600 text-white px-8 py-4 rounded-full text-lg font-semibold hover:from-blue-600 hover:to-purple-700 transition-all duration-300 transform hover:scale-105 shadow-lg">
|
||||
<%- __('hero.cta.start') %>
|
||||
</a>
|
||||
<a href="/portfolio" class="border-2 border-white text-white px-8 py-4 rounded-full text-lg font-semibold hover:bg-white hover:text-gray-900 transition-all duration-300 transform hover:scale-105">
|
||||
<%- __('hero.cta.portfolio') %>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Scroll indicator -->
|
||||
<div class="absolute bottom-8 left-1/2 transform -translate-x-1/2 animate-bounce">
|
||||
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Services Section -->
|
||||
<section class="py-20 bg-white dark:bg-gray-900">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="text-center mb-16" data-aos="fade-up">
|
||||
<h2 class="text-4xl md:text-5xl font-bold text-gray-900 dark:text-white mb-4">
|
||||
<%- __('services.title.our') %> <span class="text-blue-600 dark:text-blue-400"><%- __('services.title.services') %></span>
|
||||
</h2>
|
||||
<p class="text-xl text-gray-600 dark:text-gray-300 max-w-3xl mx-auto">
|
||||
<%- __('services.subtitle') %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||
<!-- Web Development Service -->
|
||||
<div class="group p-8 bg-gray-50 dark:bg-gray-800 rounded-2xl hover:bg-white dark:hover:bg-gray-700 hover:shadow-xl transition-all duration-300 transform hover:-translate-y-2 card-hover" data-aos="fade-up">
|
||||
<div class="text-blue-600 dark:text-blue-400 mb-4 group-hover:scale-110 transition-transform duration-300">
|
||||
<i class="fas fa-code text-4xl"></i>
|
||||
</div>
|
||||
<h3 class="text-xl font-bold text-gray-900 dark:text-white mb-3"><%- __('services.web.title') %></h3>
|
||||
<p class="text-gray-600 dark:text-gray-300 mb-4"><%- __('services.web.description') %></p>
|
||||
<div class="text-blue-600 dark:text-blue-400 font-semibold"><%- __('services.web.price') %></div>
|
||||
</div>
|
||||
|
||||
<!-- Mobile App Service -->
|
||||
<div class="group p-8 bg-gray-50 dark:bg-gray-800 rounded-2xl hover:bg-white dark:hover:bg-gray-700 hover:shadow-xl transition-all duration-300 transform hover:-translate-y-2 card-hover" data-aos="fade-up" data-aos-delay="100">
|
||||
<div class="text-blue-600 dark:text-blue-400 mb-4 group-hover:scale-110 transition-transform duration-300">
|
||||
<i class="fas fa-mobile-alt text-4xl"></i>
|
||||
</div>
|
||||
<h3 class="text-xl font-bold text-gray-900 dark:text-white mb-3"><%- __('services.mobile.title') %></h3>
|
||||
<p class="text-gray-600 dark:text-gray-300 mb-4"><%- __('services.mobile.description') %></p>
|
||||
<div class="text-blue-600 dark:text-blue-400 font-semibold"><%- __('services.mobile.price') %></div>
|
||||
</div>
|
||||
|
||||
<!-- UI/UX Design Service -->
|
||||
<div class="group p-8 bg-gray-50 dark:bg-gray-800 rounded-2xl hover:bg-white dark:hover:bg-gray-700 hover:shadow-xl transition-all duration-300 transform hover:-translate-y-2 card-hover" data-aos="fade-up" data-aos-delay="200">
|
||||
<div class="text-blue-600 dark:text-blue-400 mb-4 group-hover:scale-110 transition-transform duration-300">
|
||||
<i class="fas fa-palette text-4xl"></i>
|
||||
</div>
|
||||
<h3 class="text-xl font-bold text-gray-900 dark:text-white mb-3"><%- __('services.design.title') %></h3>
|
||||
<p class="text-gray-600 dark:text-gray-300 mb-4"><%- __('services.design.description') %></p>
|
||||
<div class="text-blue-600 dark:text-blue-400 font-semibold"><%- __('services.design.price') %></div>
|
||||
</div>
|
||||
|
||||
<!-- Digital Marketing Service -->
|
||||
<div class="group p-8 bg-gray-50 dark:bg-gray-800 rounded-2xl hover:bg-white dark:hover:bg-gray-700 hover:shadow-xl transition-all duration-300 transform hover:-translate-y-2 card-hover" data-aos="fade-up" data-aos-delay="300">
|
||||
<div class="text-blue-600 dark:text-blue-400 mb-4 group-hover:scale-110 transition-transform duration-300">
|
||||
<i class="fas fa-chart-line text-4xl"></i>
|
||||
</div>
|
||||
<h3 class="text-xl font-bold text-gray-900 dark:text-white mb-3"><%- __('services.marketing.title') %></h3>
|
||||
<p class="text-gray-600 dark:text-gray-300 mb-4"><%- __('services.marketing.description') %></p>
|
||||
<div class="text-blue-600 dark:text-blue-400 font-semibold"><%- __('services.marketing.price') %></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-12" data-aos="fade-up">
|
||||
<a href="/services" class="inline-flex items-center px-6 py-3 border border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400 font-semibold rounded-lg hover:bg-blue-600 hover:text-white dark:hover:bg-blue-400 dark:hover:text-gray-900 transition-colors">
|
||||
<%- __('services.view_all') %>
|
||||
<svg class="ml-2 w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Portfolio Section -->
|
||||
<section class="py-20 bg-gray-50 dark:bg-gray-800">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="text-center mb-16" data-aos="fade-up">
|
||||
<h2 class="text-4xl md:text-5xl font-bold text-gray-900 dark:text-white mb-4">
|
||||
<%- __('portfolio.title.recent') %> <span class="text-purple-600 dark:text-purple-400"><%- __('portfolio.title.projects') %></span>
|
||||
</h2>
|
||||
<p class="text-xl text-gray-600 dark:text-gray-300 max-w-3xl mx-auto">
|
||||
<%- __('portfolio.subtitle') %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
<% if (featuredPortfolio && featuredPortfolio.length > 0) { %>
|
||||
<% featuredPortfolio.forEach((project, index) => { %>
|
||||
<div class="group bg-white dark:bg-gray-700 rounded-2xl overflow-hidden shadow-lg hover:shadow-2xl transition-all duration-300 transform hover:-translate-y-2 card-hover" data-aos="fade-up" data-aos-delay="<%= index * 100 %>">
|
||||
<div class="relative overflow-hidden portfolio-item">
|
||||
<% if (project.images && project.images.length > 0) { %>
|
||||
<img src="<%= project.images.find(img => img.isPrimary)?.url || project.images[0].url %>"
|
||||
alt="<%= project.images.find(img => img.isPrimary)?.alt || project.title %>"
|
||||
class="w-full h-48 object-cover portfolio-image">
|
||||
<% } else { %>
|
||||
<div class="w-full h-48 bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center">
|
||||
<span class="text-white text-2xl font-bold"><%= project.title.charAt(0) %></span>
|
||||
</div>
|
||||
<% } %>
|
||||
<div class="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
|
||||
<div class="absolute bottom-4 left-4 right-4 transform translate-y-4 group-hover:translate-y-0 transition-transform duration-300 opacity-0 group-hover:opacity-100">
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<% if (project.technologies && project.technologies.length > 0) { %>
|
||||
<% project.technologies.slice(0, 3).forEach(tech => { %>
|
||||
<span class="px-2 py-1 bg-white/20 glass-effect text-white text-xs rounded-full"><%= tech %></span>
|
||||
<% }) %>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-6">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<span class="px-3 py-1 bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-300 text-sm rounded-full font-medium"><%= project.category %></span>
|
||||
<span class="text-gray-500 dark:text-gray-400 text-sm">
|
||||
<i class="fas fa-eye mr-1"></i><%= project.viewCount || 0 %>
|
||||
</span>
|
||||
</div>
|
||||
<h3 class="text-xl font-bold text-gray-900 dark:text-white mb-2 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors"><%= project.title %></h3>
|
||||
<p class="text-gray-600 dark:text-gray-300 mb-4"><%= project.shortDescription || project.description %></p>
|
||||
<a href="/portfolio/<%= project._id %>" class="inline-flex items-center text-blue-600 dark:text-blue-400 font-semibold hover:text-blue-700 dark:hover:text-blue-300 transition-colors">
|
||||
<%- __('common.view_details') %>
|
||||
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<% }) %>
|
||||
<% } else { %>
|
||||
<!-- Default portfolio items -->
|
||||
<div class="group bg-white dark:bg-gray-700 rounded-2xl overflow-hidden shadow-lg hover:shadow-2xl transition-all duration-300 transform hover:-translate-y-2 card-hover" data-aos="fade-up">
|
||||
<div class="relative overflow-hidden portfolio-item">
|
||||
<div class="w-full h-48 bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center">
|
||||
<span class="text-white text-2xl font-bold">E</span>
|
||||
</div>
|
||||
<div class="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
|
||||
<div class="absolute bottom-4 left-4 right-4 transform translate-y-4 group-hover:translate-y-0 transition-transform duration-300 opacity-0 group-hover:opacity-100">
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<span class="px-2 py-1 bg-white/20 glass-effect text-white text-xs rounded-full">React</span>
|
||||
<span class="px-2 py-1 bg-white/20 glass-effect text-white text-xs rounded-full">Node.js</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-6">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<span class="px-3 py-1 bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-300 text-sm rounded-full font-medium"><%- __('portfolio.default.ecommerce') %></span>
|
||||
<span class="text-gray-500 dark:text-gray-400 text-sm">
|
||||
<i class="fas fa-eye mr-1"></i>1,234
|
||||
</span>
|
||||
</div>
|
||||
<h3 class="text-xl font-bold text-gray-900 dark:text-white mb-2 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors"><%- __('portfolio.default.title') %></h3>
|
||||
<p class="text-gray-600 dark:text-gray-300 mb-4"><%- __('portfolio.default.description') %></p>
|
||||
<a href="#" class="inline-flex items-center text-blue-600 dark:text-blue-400 font-semibold hover:text-blue-700 dark:hover:text-blue-300 transition-colors">
|
||||
<%- __('common.view_details') %>
|
||||
<svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-12" data-aos="fade-up">
|
||||
<a href="/portfolio" class="inline-flex items-center px-6 py-3 bg-purple-600 dark:bg-purple-500 text-white font-semibold rounded-lg hover:bg-purple-700 dark:hover:bg-purple-400 transition-colors">
|
||||
<%- __('portfolio.view_all') %>
|
||||
<svg class="ml-2 w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Calculator CTA Section -->
|
||||
<section class="py-20 cta-section">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center relative z-10">
|
||||
<div data-aos="fade-up">
|
||||
<h2 class="text-4xl md:text-5xl font-bold text-white mb-6">
|
||||
<%- __('calculator.cta.title') %>
|
||||
</h2>
|
||||
<p class="text-xl text-blue-100 mb-8 max-w-3xl mx-auto">
|
||||
<%- __('calculator.cta.subtitle') %>
|
||||
</p>
|
||||
<a href="/calculator" class="inline-flex items-center px-8 py-4 bg-white text-blue-600 font-bold rounded-full text-lg hover:bg-gray-100 transition-colors transform hover:scale-105">
|
||||
<i class="fas fa-calculator mr-3"></i>
|
||||
<%- __('calculator.cta.button') %>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Contact Section -->
|
||||
<section class="py-20 bg-white dark:bg-gray-900">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
|
||||
<div data-aos="fade-right">
|
||||
<h2 class="text-4xl md:text-5xl font-bold text-gray-900 dark:text-white mb-6">
|
||||
<%- __('contact.cta.ready') %> <span class="text-blue-600 dark:text-blue-400"><%- __('contact.cta.start') %></span><%- __('contact.cta.question') %>
|
||||
</h2>
|
||||
<p class="text-xl text-gray-600 dark:text-gray-300 mb-8">
|
||||
<%- __('contact.cta.subtitle') %>
|
||||
</p>
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center">
|
||||
<div class="w-12 h-12 bg-blue-100 dark:bg-blue-900 rounded-full flex items-center justify-center mr-4">
|
||||
<i class="fas fa-phone text-blue-600 dark:text-blue-400"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-semibold text-gray-900 dark:text-white"><%- __('contact.phone.title') %></div>
|
||||
<div class="text-gray-600 dark:text-gray-300"><%- __('contact.phone.number') %></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-12 h-12 bg-purple-100 dark:bg-purple-900 rounded-full flex items-center justify-center mr-4">
|
||||
<i class="fas fa-envelope text-purple-600 dark:text-purple-400"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-semibold text-gray-900 dark:text-white"><%- __('contact.email.title') %></div>
|
||||
<div class="text-gray-600 dark:text-gray-300"><%- __('contact.email.address') %></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<div class="w-12 h-12 bg-green-100 dark:bg-green-900 rounded-full flex items-center justify-center mr-4">
|
||||
<i class="fab fa-telegram text-green-600 dark:text-green-400"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="font-semibold text-gray-900 dark:text-white"><%- __('contact.telegram.title') %></div>
|
||||
<div class="text-gray-600 dark:text-gray-300"><%- __('contact.telegram.subtitle') %></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-aos="fade-left">
|
||||
<div class="contact-form p-8 rounded-2xl shadow-lg bg-white dark:bg-gray-800">
|
||||
<h3 class="text-2xl font-bold text-gray-900 dark:text-white mb-6"><%- __('contact.form.title') %></h3>
|
||||
<form id="quick-contact-form" class="space-y-4">
|
||||
<div>
|
||||
<input type="text" name="name" placeholder="<%- __('contact.form.name') %>" required class="form-input w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent dark:bg-gray-700 dark:text-white">
|
||||
</div>
|
||||
<div>
|
||||
<input type="email" name="email" placeholder="<%- __('contact.form.email') %>" required class="form-input w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent dark:bg-gray-700 dark:text-white">
|
||||
</div>
|
||||
<div>
|
||||
<input type="tel" name="phone" placeholder="<%- __('contact.form.phone') %>" class="form-input w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent dark:bg-gray-700 dark:text-white">
|
||||
</div>
|
||||
<div>
|
||||
<select name="serviceInterest" class="form-input w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent dark:bg-gray-700 dark:text-white">
|
||||
<option value=""><%- __('contact.form.service.select') %></option>
|
||||
<option value="web-development"><%- __('contact.form.service.web') %></option>
|
||||
<option value="mobile-app"><%- __('contact.form.service.mobile') %></option>
|
||||
<option value="ui-ux-design"><%- __('contact.form.service.design') %></option>
|
||||
<option value="branding"><%- __('contact.form.service.branding') %></option>
|
||||
<option value="consulting"><%- __('contact.form.service.consulting') %></option>
|
||||
<option value="other"><%- __('contact.form.service.other') %></option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<textarea name="message" rows="4" placeholder="<%- __('contact.form.message') %>" required class="form-input w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent resize-none dark:bg-gray-700 dark:text-white"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="w-full btn-primary bg-gradient-to-r from-blue-600 to-purple-600 text-white font-semibold py-3 rounded-lg hover:from-blue-700 hover:to-purple-700 transition-all duration-300 transform hover:scale-105">
|
||||
<%- __('contact.form.submit') %>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<%- include('partials/footer') %>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script>
|
||||
// Initialize AOS
|
||||
AOS.init({
|
||||
duration: 800,
|
||||
once: true,
|
||||
offset: 100
|
||||
});
|
||||
|
||||
// Blob animation
|
||||
const style = document.createElement('style');
|
||||
style.textContent = `
|
||||
@keyframes blob {
|
||||
0% { transform: translate(0px, 0px) scale(1); }
|
||||
33% { transform: translate(30px, -50px) scale(1.1); }
|
||||
66% { transform: translate(-20px, 20px) scale(0.9); }
|
||||
100% { transform: translate(0px, 0px) scale(1); }
|
||||
}
|
||||
.animate-blob {
|
||||
animation: blob 7s infinite;
|
||||
}
|
||||
.animation-delay-2000 {
|
||||
animation-delay: 2s;
|
||||
}
|
||||
.animation-delay-4000 {
|
||||
animation-delay: 4s;
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
|
||||
// Contact form handler
|
||||
document.getElementById('quick-contact-form').addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
const formData = new FormData(this);
|
||||
|
||||
fetch('/contact', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
alert('<%- __("contact.form.success") %>');
|
||||
this.reset();
|
||||
} else {
|
||||
alert('<%- __("contact.form.error") %>');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
alert('<%- __("contact.form.error") %>');
|
||||
});
|
||||
});
|
||||
|
||||
// Theme initialization
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const theme = localStorage.getItem('theme') || 'light';
|
||||
document.documentElement.className = theme === 'dark' ? 'dark' : '';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user