site prototype

This commit is contained in:
akairatu 2025-07-23 17:14:06 +05:00
commit 8569ed720a
13 changed files with 3876 additions and 0 deletions

20
.gitignore vendored Normal file
View File

@ -0,0 +1,20 @@
# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# Editor directories and files
.idea/
.vscode/
*.swp
*.swo
.DS_Store
Thumbs.db

65
README.md Normal file
View File

@ -0,0 +1,65 @@
# Presentation Website
A modern, responsive presentation website template with smooth animations and mobile-friendly design.
## Features
- Responsive design
- Mobile-friendly navigation
- Smooth scrolling
- Animated service cards
- Contact form
- Modern UI components
## Prerequisites
- Node.js (Download and install from [nodejs.org](https://nodejs.org/))
## Getting Started
1. Clone this repository:
```bash
git clone <repository-url>
cd hantalanding
```
2. Install dependencies:
```bash
npm install
```
3. Start the development server:
```bash
npm start
```
The website will be available at `http://localhost:3000`
## Project Structure
```
src/
├── assets/ # Images and other static files
├── css/ # Stylesheets
├── js/ # JavaScript files
└── index.html # Main HTML file
```
## Customization
1. Replace the logo text in `index.html`
2. Update the hero section content
3. Modify the About section with your content
4. Customize service cards
5. Configure the contact form
## Development
The project uses live-server for development, which provides:
- Auto-reload on file changes
- Static file serving
- Cross-browser compatibility
## License
This project is licensed under the ISC License.

2399
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

16
package.json Normal file
View File

@ -0,0 +1,16 @@
{
"name": "hantalanding",
"version": "1.0.0",
"description": "Modern presentation website",
"main": "index.js",
"scripts": {
"start": "live-server src --port=3000",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": ["landing", "presentation", "website"],
"author": "",
"license": "ISC",
"devDependencies": {
"live-server": "^1.2.2"
}
}

15
src/assets/globe-icon.svg Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#4F46E5"/>
<stop offset="100%" style="stop-color:#818CF8"/>
</linearGradient>
</defs>
<circle cx="100" cy="100" r="95" stroke="url(#gradient)" stroke-width="3" opacity="0.8"/>
<ellipse cx="100" cy="100" rx="95" ry="30" stroke="url(#gradient)" stroke-width="3" opacity="0.6"/>
<line x1="5" y1="100" x2="195" y2="100" stroke="url(#gradient)" stroke-width="3" opacity="0.4"/>
<line x1="100" y1="5" x2="100" y2="195" stroke="url(#gradient)" stroke-width="3" opacity="0.4"/>
<path d="M100 5C120 35 130 65 130 100C130 135 120 165 100 195" stroke="url(#gradient)" stroke-width="3" opacity="0.6"/>
<path d="M100 5C80 35 70 65 70 100C70 135 80 165 100 195" stroke="url(#gradient)" stroke-width="3" opacity="0.6"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="600" height="400" viewBox="0 0 600 400" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#4F46E5;stop-opacity:0.2"/>
<stop offset="100%" style="stop-color:#818CF8;stop-opacity:0.2"/>
</linearGradient>
<linearGradient id="grad2" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#FB7185;stop-opacity:0.2"/>
<stop offset="100%" style="stop-color:#FFB1C1;stop-opacity:0.2"/>
</linearGradient>
</defs>
<!-- Background Shapes -->
<circle cx="300" cy="200" r="150" fill="url(#grad1)"/>
<circle cx="400" cy="300" r="100" fill="url(#grad2)"/>
<!-- Graduation Cap -->
<path d="M250 150L350 150L300 100L250 150Z" fill="#4F46E5"/>
<rect x="290" y="150" width="20" height="60" fill="#4F46E5"/>
<path d="M270 160L330 160L300 180L270 160Z" fill="#818CF8"/>
<!-- Books -->
<rect x="200" y="250" width="200" height="20" fill="#FB7185" rx="5"/>
<rect x="220" y="230" width="160" height="20" fill="#4F46E5" rx="5"/>
<rect x="240" y="210" width="120" height="20" fill="#818CF8" rx="5"/>
<!-- Stars -->
<path d="M150 100L160 120L180 110L160 100L150 80L140 100L120 110L140 120L150 100Z" fill="#FB7185"/>
<path d="M450 150L460 170L480 160L460 150L450 130L440 150L420 160L440 170L450 150Z" fill="#818CF8"/>
<path d="M400 50L410 70L430 60L410 50L400 30L390 50L370 60L390 70L400 50Z" fill="#4F46E5"/>
<!-- Text -->
<text x="300" y="350" font-family="Arial, sans-serif" font-size="24" fill="#4F46E5" text-anchor="middle">Success in Education</text>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="80" viewBox="0 0 200 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<text x="50%" y="50%" font-family="Georgia, serif" font-size="24" fill="#4F46E5" text-anchor="middle" dominant-baseline="middle">CAMBRIDGE</text>
<text x="50%" y="70%" font-family="Georgia, serif" font-size="16" fill="#6B7280" text-anchor="middle" dominant-baseline="middle">UNIVERSITY</text>
</svg>

After

Width:  |  Height:  |  Size: 445 B

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="80" viewBox="0 0 200 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<text x="50%" y="50%" font-family="Georgia, serif" font-size="24" fill="#4F46E5" text-anchor="middle" dominant-baseline="middle">HARVARD</text>
<text x="50%" y="70%" font-family="Georgia, serif" font-size="16" fill="#6B7280" text-anchor="middle" dominant-baseline="middle">UNIVERSITY</text>
</svg>

After

Width:  |  Height:  |  Size: 443 B

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="80" viewBox="0 0 200 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<text x="50%" y="50%" font-family="Georgia, serif" font-size="24" fill="#4F46E5" text-anchor="middle" dominant-baseline="middle">MIT</text>
<text x="50%" y="70%" font-family="Georgia, serif" font-size="16" fill="#6B7280" text-anchor="middle" dominant-baseline="middle">Massachusetts Institute of Technology</text>
</svg>

After

Width:  |  Height:  |  Size: 466 B

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="80" viewBox="0 0 200 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<text x="50%" y="50%" font-family="Georgia, serif" font-size="24" fill="#4F46E5" text-anchor="middle" dominant-baseline="middle">OXFORD</text>
<text x="50%" y="70%" font-family="Georgia, serif" font-size="16" fill="#6B7280" text-anchor="middle" dominant-baseline="middle">UNIVERSITY</text>
</svg>

After

Width:  |  Height:  |  Size: 442 B

766
src/css/style.css Normal file
View File

@ -0,0 +1,766 @@
:root {
--primary-color: #4F46E5;
--primary-dark: #3730A3;
--primary-light: #818CF8;
--secondary-color: #F4F5FF;
--accent-color: #FB7185;
--success-color: #10B981;
--text-color: #1F2937;
--text-light: #6B7280;
--white: #ffffff;
--gradient-1: linear-gradient(135deg, #4F46E5 0%, #818CF8 100%);
--gradient-2: linear-gradient(135deg, #FB7185 0%, #FFB1C1 100%);
--gradient-success: linear-gradient(135deg, #10B981 0%, #34D399 100%);
--transition: all 0.3s ease;
--shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}
/* Base Animations */
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
@keyframes shimmer {
0% { background-position: -1000px 0; }
100% { background-position: 1000px 0; }
}
/* Animation Classes */
.animate-slide-up {
opacity: 0;
transform: translateY(30px);
animation: slideUp 0.6s ease forwards;
}
.animate-fade-in {
opacity: 0;
animation: fadeIn 0.6s ease forwards;
}
.animate-pulse {
animation: pulse 2s infinite;
}
[data-delay] {
animation-delay: var(--delay);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'Inter', sans-serif;
line-height: 1.6;
color: var(--text-color);
background-color: var(--white);
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* Header Styles */
.header {
position: fixed;
top: 0;
left: 0;
width: 100%;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
box-shadow: var(--shadow);
z-index: 1000;
}
.nav-container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 0;
}
.logo {
font-size: 1.5rem;
font-weight: 700;
color: var(--text-color);
}
.logo span {
color: var(--primary-color);
}
.nav-links {
display: flex;
list-style: none;
gap: 2rem;
align-items: center;
}
.nav-links a {
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: var(--transition);
}
.nav-links a:hover {
color: var(--primary-color);
background: var(--secondary-color);
padding: 0.5rem 1rem;
border-radius: 5px;
}
.lang-switch {
display: flex;
gap: 0.5rem;
}
.lang-switch a {
padding: 0.2rem 0.5rem;
border-radius: 4px;
}
.lang-switch a.active {
background: var(--gradient-1);
color: var(--white);
}
.contact-icons {
display: flex;
gap: 1rem;
}
.contact-icons a {
color: var(--primary-color);
font-size: 1.5rem;
transition: var(--transition);
}
.contact-icons a:hover {
transform: scale(1.1);
}
.nav-toggle {
display: none;
cursor: pointer;
font-size: 1.5rem;
}
/* Hero Section */
.hero-section {
padding: 120px 0 60px;
background: var(--gradient-1);
position: relative;
overflow: hidden;
color: var(--white);
}
.main-title {
font-size: 4rem;
line-height: 1.2;
margin-bottom: 2rem;
font-weight: 700;
background: var(--white);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
}
.hero-description {
color: var(--secondary-color);
font-size: 1.2rem;
margin-bottom: 2rem;
}
.hero-buttons {
display: flex;
gap: 1rem;
}
.btn {
display: inline-block;
padding: 1rem 2rem;
border-radius: 50px;
text-decoration: none;
font-weight: 500;
transition: var(--transition);
text-align: center;
}
.btn-primary {
background: var(--accent-color);
color: var(--white);
box-shadow: var(--shadow);
}
.btn-secondary {
background: transparent;
border: 2px solid var(--white);
color: var(--white);
}
.btn:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-lg);
}
.hero-image {
position: relative;
}
.floating {
animation: float 6s ease-in-out infinite;
}
/* About Section */
.about-section {
padding: 80px 0;
background: var(--white);
}
.section-title {
font-size: 2.5rem;
margin-bottom: 2rem;
text-align: center;
}
.highlight-text {
font-size: 1.5rem;
color: var(--primary-color);
margin-bottom: 1.5rem;
font-weight: 600;
}
.about-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
/* Exams Section */
.exams-section {
padding: 80px 0;
background: var(--secondary-color);
}
.exam-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
}
.exam-card {
background: var(--white);
padding: 2rem;
border-radius: 15px;
box-shadow: var(--shadow);
transition: var(--transition);
border: 1px solid rgba(79, 70, 229, 0.1);
}
.exam-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-lg);
border-color: var(--primary-light);
}
.exam-card h3 {
color: var(--primary-color);
margin-bottom: 1rem;
font-weight: 600;
}
.exam-card ul {
list-style-position: inside;
margin-top: 1rem;
}
/* Advantages Section */
.advantages-section {
padding: 80px 0;
background: var(--white);
}
.advantages-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
}
.advantage-card {
text-align: center;
padding: 2rem;
border-radius: 15px;
background: var(--white);
box-shadow: var(--shadow);
transition: var(--transition);
}
.advantage-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-lg);
}
.advantage-card i {
font-size: 3rem;
background: var(--gradient-1);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
margin-bottom: 1rem;
}
/* Universities Section */
.universities-section {
padding: 80px 0;
background: var(--secondary-color);
position: relative;
overflow: hidden;
}
.universities-section::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: var(--gradient-1);
opacity: 0.05;
transform: rotate(-45deg);
z-index: 0;
}
.section-subtitle {
text-align: center;
color: var(--text-light);
margin-bottom: 3rem;
}
.university-logos {
position: relative;
z-index: 1;
}
.university-logos img {
max-width: 180px;
height: auto;
transition: var(--transition);
filter: grayscale(1) opacity(0.7);
}
.university-logos img:hover {
filter: grayscale(0) opacity(1);
transform: scale(1.05);
}
/* Contact Section */
.contact-section {
padding: 80px 0;
background: var(--gradient-1);
color: var(--white);
}
.contact-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.contact-text {
font-size: 1.5rem;
margin-bottom: 2rem;
}
.contact-buttons {
display: grid;
gap: 1rem;
}
.btn-outline {
background: transparent;
border: 2px solid var(--white);
color: var(--white);
}
.contact-form {
display: grid;
gap: 1rem;
}
.contact-form input,
.contact-form button {
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
color: var(--white);
backdrop-filter: blur(10px);
}
.contact-form input::placeholder {
color: rgba(255, 255, 255, 0.8);
}
.contact-form button:hover {
background: var(--accent-color);
border-color: var(--accent-color);
}
.stats-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
margin: 2rem 0;
text-align: center;
}
.stat-item {
padding: 1rem;
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
backdrop-filter: blur(10px);
}
.stat-number {
font-size: 2.5rem;
font-weight: 700;
color: var(--white);
display: inline-block;
}
.methodology-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
margin-top: 3rem;
}
.method-card {
background: var(--white);
padding: 2rem;
border-radius: 15px;
box-shadow: var(--shadow);
transition: var(--transition);
text-align: center;
}
.method-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-lg);
}
.method-icon {
width: 80px;
height: 80px;
margin: 0 auto 1.5rem;
background: var(--gradient-1);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.method-icon i {
font-size: 2rem;
color: var(--white);
}
.exam-features {
list-style: none;
margin: 1.5rem 0;
}
.exam-features li {
display: flex;
align-items: center;
margin-bottom: 0.8rem;
}
.exam-features i {
color: var(--success-color);
margin-right: 0.5rem;
}
.score-range {
background: var(--gradient-success);
color: var(--white);
padding: 0.5rem 1rem;
border-radius: 25px;
font-weight: 500;
margin-top: 1rem;
}
.success-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-top: 3rem;
}
.success-card {
background: var(--white);
border-radius: 15px;
padding: 2rem;
box-shadow: var(--shadow);
}
.score-improvement {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
margin-bottom: 1.5rem;
}
.old-score {
color: var(--text-light);
text-decoration: line-through;
}
.new-score {
color: var(--success-color);
font-weight: 700;
}
.testimonial {
font-style: italic;
margin-bottom: 1.5rem;
color: var(--text-color);
}
.student-info {
text-align: right;
}
.student-name {
font-weight: 600;
display: block;
}
.admission {
color: var(--primary-color);
font-size: 0.9rem;
}
.benefits-list {
list-style: none;
margin: 2rem 0;
}
.benefits-list li {
display: flex;
align-items: center;
margin-bottom: 1rem;
color: var(--white);
}
.benefits-list i {
margin-right: 1rem;
color: var(--accent-color);
}
.animate-input {
transform-origin: left;
transition: transform 0.3s ease;
}
.animate-input:focus {
transform: scale(1.02);
}
.animate-button {
position: relative;
overflow: hidden;
}
.animate-button::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 200%;
height: 100%;
background: linear-gradient(
to right,
rgba(255,255,255,0) 0%,
rgba(255,255,255,0.3) 50%,
rgba(255,255,255,0) 100%
);
transform: translateX(-100%);
}
.animate-button:hover::after {
transform: translateX(100%);
transition: transform 0.6s ease;
}
/* Footer */
.footer {
background: var(--text-color);
color: var(--white);
padding: 4rem 0 2rem;
}
.footer-content {
display: grid;
grid-template-columns: 1fr 2fr;
gap: 4rem;
}
.footer-links {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
}
.link-group h4 {
color: var(--primary-light);
margin-bottom: 1rem;
}
.link-group a {
color: var(--text-light);
text-decoration: none;
display: block;
margin-bottom: 0.5rem;
transition: var(--transition);
}
.link-group a:hover {
color: var(--white);
}
.footer-bottom {
margin-top: 3rem;
padding-top: 2rem;
border-top: 1px solid rgba(255,255,255,0.1);
text-align: center;
color: var(--text-light);
}
/* Responsive Design */
@media (max-width: 992px) {
.main-title {
font-size: 3rem;
}
.about-content,
.contact-content {
grid-template-columns: 1fr;
gap: 2rem;
}
.stats-container {
grid-template-columns: repeat(2, 1fr);
}
.footer-content {
grid-template-columns: 1fr;
gap: 2rem;
}
}
@media (max-width: 768px) {
.nav-toggle {
display: block;
}
.nav-links {
display: none;
position: absolute;
top: 100%;
left: 0;
right: 0;
background: var(--white);
flex-direction: column;
padding: 1rem 0;
box-shadow: var(--shadow);
}
.nav-links.active {
display: flex;
}
.contact-icons {
display: none;
}
.main-title {
font-size: 2.5rem;
}
.hero-buttons {
flex-direction: column;
}
.university-logos {
grid-template-columns: repeat(2, 1fr);
}
.stats-container {
grid-template-columns: 1fr;
}
.footer-links {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.section-title {
font-size: 2rem;
}
.highlight-text {
font-size: 1.2rem;
}
.contact-buttons {
grid-template-columns: 1fr;
}
.footer-content {
flex-direction: column;
gap: 1rem;
text-align: center;
}
.footer-links {
grid-template-columns: 1fr;
}
}

277
src/index.html Normal file
View File

@ -0,0 +1,277 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ExamPrep Pro | Your Path to Academic Success</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
</head>
<body>
<header class="header">
<nav class="nav-container">
<div class="logo">ExamPrep<span>Pro</span></div>
<div class="nav-toggle" id="navToggle">
<i class="fas fa-bars"></i>
</div>
<ul class="nav-links">
<li><a href="#services">Our Services</a></li>
<li><a href="#methodology">Methodology</a></li>
<li><a href="#exams">Exams</a></li>
<li><a href="#success">Success Stories</a></li>
<li><a href="#contact">Contact</a></li>
<li class="lang-switch">
<a href="#" class="active">EN</a>
<a href="#">RU</a>
</li>
</ul>
<div class="contact-icons">
<a href="https://wa.me/your-number" target="_blank" class="animate-hover"><i class="fab fa-whatsapp"></i></a>
<a href="https://t.me/your-channel" target="_blank" class="animate-hover"><i class="fab fa-telegram"></i></a>
</div>
</nav>
</header>
<main>
<section id="hero" class="hero-section">
<div class="container">
<div class="hero-content animate-slide-up">
<h1 class="main-title">YOUR JOURNEY TO<br>ACADEMIC EXCELLENCE</h1>
<p class="hero-description">Expert preparation for international exams with proven methodologies and personalized approach. Join thousands of successful students worldwide.</p>
<div class="stats-container animate-fade-in">
<div class="stat-item">
<span class="stat-number" data-target="95">0</span>%
<p>Success Rate</p>
</div>
<div class="stat-item">
<span class="stat-number" data-target="1000">0</span>+
<p>Students</p>
</div>
<div class="stat-item">
<span class="stat-number" data-target="15">0</span>+
<p>Years Experience</p>
</div>
</div>
<div class="hero-buttons">
<a href="#methodology" class="btn btn-primary animate-pulse">Learn Our Method</a>
<a href="#contact" class="btn btn-secondary">Start Now</a>
</div>
</div>
</div>
<div class="hero-shapes">
<div class="shape shape1"></div>
<div class="shape shape2"></div>
</div>
</section>
<section id="methodology" class="methodology-section">
<div class="container">
<h2 class="section-title animate-slide-up">OUR METHODOLOGY</h2>
<div class="methodology-grid">
<div class="method-card animate-slide-up">
<div class="method-icon">
<i class="fas fa-brain"></i>
</div>
<h3>Diagnostic Assessment</h3>
<p>We start with a comprehensive evaluation of your current knowledge and skills to create a personalized study plan.</p>
</div>
<div class="method-card animate-slide-up" data-delay="200">
<div class="method-icon">
<i class="fas fa-route"></i>
</div>
<h3>Strategic Planning</h3>
<p>Custom study schedule based on your target exam date, current level, and available study time.</p>
</div>
<div class="method-card animate-slide-up" data-delay="400">
<div class="method-icon">
<i class="fas fa-graduation-cap"></i>
</div>
<h3>Intensive Practice</h3>
<p>Regular mock exams and targeted practice sessions with detailed feedback and improvement strategies.</p>
</div>
<div class="method-card animate-slide-up" data-delay="600">
<div class="method-icon">
<i class="fas fa-chart-line"></i>
</div>
<h3>Progress Tracking</h3>
<p>Continuous monitoring of your progress with data-driven adjustments to your study plan.</p>
</div>
</div>
</div>
</section>
<section id="exams" class="exams-section">
<div class="container">
<h2 class="section-title animate-slide-up">EXAM PREPARATION</h2>
<div class="exam-grid">
<div class="exam-card animate-slide-up">
<h3>GMAT | GRE</h3>
<ul class="exam-features">
<li><i class="fas fa-check"></i> Quantitative Reasoning</li>
<li><i class="fas fa-check"></i> Verbal Reasoning</li>
<li><i class="fas fa-check"></i> Integrated Reasoning</li>
<li><i class="fas fa-check"></i> Analytical Writing</li>
</ul>
<div class="score-range">
<span>Target Score: 700-800</span>
</div>
</div>
<div class="exam-card animate-slide-up" data-delay="200">
<h3>TOEFL | IELTS</h3>
<ul class="exam-features">
<li><i class="fas fa-check"></i> Reading Comprehension</li>
<li><i class="fas fa-check"></i> Listening Skills</li>
<li><i class="fas fa-check"></i> Speaking Practice</li>
<li><i class="fas fa-check"></i> Writing Tasks</li>
</ul>
<div class="score-range">
<span>Target Score: IELTS 7.0-9.0 | TOEFL 100-120</span>
</div>
</div>
<div class="exam-card animate-slide-up" data-delay="400">
<h3>SAT | ACT</h3>
<ul class="exam-features">
<li><i class="fas fa-check"></i> Mathematics</li>
<li><i class="fas fa-check"></i> Critical Reading</li>
<li><i class="fas fa-check"></i> Writing & Language</li>
<li><i class="fas fa-check"></i> Science (ACT)</li>
</ul>
<div class="score-range">
<span>Target Score: SAT 1500+ | ACT 33+</span>
</div>
</div>
</div>
</div>
</section>
<section id="success" class="success-section">
<div class="container">
<h2 class="section-title animate-slide-up">SUCCESS STORIES</h2>
<div class="success-grid">
<div class="success-card animate-slide-up">
<div class="success-content">
<div class="score-improvement">
<span class="old-score">GMAT 600</span>
<i class="fas fa-arrow-right"></i>
<span class="new-score">GMAT 740</span>
</div>
<p class="testimonial">"The structured approach and continuous support helped me achieve my target score in just 3 months!"</p>
<div class="student-info">
<span class="student-name">Alex M.</span>
<span class="admission">Admitted to Harvard Business School</span>
</div>
</div>
</div>
<div class="success-card animate-slide-up" data-delay="200">
<div class="success-content">
<div class="score-improvement">
<span class="old-score">IELTS 6.0</span>
<i class="fas fa-arrow-right"></i>
<span class="new-score">IELTS 8.0</span>
</div>
<p class="testimonial">"The intensive speaking practice and writing feedback were invaluable for my IELTS preparation."</p>
<div class="student-info">
<span class="student-name">Maria K.</span>
<span class="admission">Admitted to Oxford University</span>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="contact" class="contact-section">
<div class="container">
<h2 class="section-title">START YOUR JOURNEY</h2>
<div class="contact-content">
<div class="contact-info animate-slide-up">
<h3>Why Choose Us?</h3>
<ul class="benefits-list">
<li><i class="fas fa-check-circle"></i> Personalized Study Plan</li>
<li><i class="fas fa-check-circle"></i> Expert Instructors</li>
<li><i class="fas fa-check-circle"></i> Guaranteed Results</li>
<li><i class="fas fa-check-circle"></i> Flexible Schedule</li>
<li><i class="fas fa-check-circle"></i> Online & Offline Options</li>
</ul>
<div class="contact-buttons">
<a href="#" class="btn btn-primary">Join Free Trial Class</a>
<div class="social-links">
<a href="#" class="btn btn-outline">Telegram</a>
<a href="#" class="btn btn-outline">WhatsApp</a>
</div>
</div>
</div>
<form class="contact-form animate-slide-up" data-delay="200">
<div class="form-group">
<input type="text" placeholder="Your Name" required class="animate-input">
</div>
<div class="form-group">
<input type="tel" placeholder="+7 (999) 999-99-99" required class="animate-input">
</div>
<div class="form-group">
<select required class="animate-input">
<option value="">Select Exam</option>
<option value="gmat">GMAT</option>
<option value="gre">GRE</option>
<option value="toefl">TOEFL</option>
<option value="ielts">IELTS</option>
<option value="sat">SAT</option>
<option value="act">ACT</option>
</select>
</div>
<div class="form-group">
<select required class="animate-input">
<option value="">Current Level</option>
<option value="beginner">Beginner</option>
<option value="intermediate">Intermediate</option>
<option value="advanced">Advanced</option>
</select>
</div>
<button type="submit" class="btn btn-primary animate-button">Start Preparation</button>
</form>
</div>
</div>
</section>
</main>
<footer class="footer">
<div class="container">
<div class="footer-content">
<div class="footer-info">
<div class="logo">ExamPrep<span>Pro</span></div>
<p>Your trusted partner in exam preparation since 2008</p>
</div>
<div class="footer-links">
<div class="link-group">
<h4>Exams</h4>
<a href="#">GMAT</a>
<a href="#">GRE</a>
<a href="#">TOEFL</a>
<a href="#">IELTS</a>
</div>
<div class="link-group">
<h4>Resources</h4>
<a href="#">Study Materials</a>
<a href="#">Practice Tests</a>
<a href="#">Success Stories</a>
<a href="#">Blog</a>
</div>
<div class="link-group">
<h4>Company</h4>
<a href="#">About Us</a>
<a href="#">Methodology</a>
<a href="#">Contact</a>
<a href="#">Careers</a>
</div>
</div>
</div>
<div class="footer-bottom">
<p>&copy; 2024 ExamPrep Pro. All rights reserved.</p>
</div>
</div>
</footer>
<script src="js/main.js"></script>
</body>
</html>

263
src/js/main.js Normal file
View File

@ -0,0 +1,263 @@
// Custom Cursor
const cursor = document.querySelector('.cursor');
document.addEventListener('mousemove', (e) => {
cursor.style.left = e.clientX + 'px';
cursor.style.top = e.clientY + 'px';
});
document.addEventListener('mousedown', () => {
cursor.style.transform = 'translate(-50%, -50%) scale(0.8)';
});
document.addEventListener('mouseup', () => {
cursor.style.transform = 'translate(-50%, -50%) scale(1)';
});
// Intersection Observer for Animations
const observerOptions = {
threshold: 0.2,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-slide-up');
// Handle elements with delay
const delay = entry.target.getAttribute('data-delay');
if (delay) {
entry.target.style.animationDelay = `${delay}ms`;
}
// Animate numbers if it's a stat number
if (entry.target.classList.contains('stat-number')) {
animateNumber(entry.target);
}
}
});
}, observerOptions);
// Observe elements
document.querySelectorAll('.animate-slide-up, .method-card, .exam-card, .success-card, .stat-number').forEach(el => {
observer.observe(el);
});
// Number Animation
function animateNumber(element) {
const target = parseInt(element.getAttribute('data-target'));
const duration = 2000; // 2 seconds
const step = target / (duration / 16); // 60fps
let current = 0;
const updateNumber = () => {
current += step;
if (current < target) {
element.textContent = Math.round(current);
requestAnimationFrame(updateNumber);
} else {
element.textContent = target;
}
};
updateNumber();
}
// Mobile Navigation
const navToggle = document.getElementById('navToggle');
const navLinks = document.querySelector('.nav-links');
navToggle.addEventListener('click', () => {
navLinks.classList.toggle('active');
});
// Close mobile menu when clicking outside
document.addEventListener('click', (e) => {
if (!e.target.closest('.nav-container')) {
navLinks.classList.remove('active');
}
});
// Smooth Scrolling
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
navLinks.classList.remove('active');
const target = document.querySelector(this.getAttribute('href'));
if (target) {
const headerOffset = 80;
const elementPosition = target.getBoundingClientRect().top;
const offsetPosition = elementPosition + window.pageYOffset - headerOffset;
window.scrollTo({
top: offsetPosition,
behavior: 'smooth'
});
}
});
});
// Form Animations
const formInputs = document.querySelectorAll('.animate-input');
formInputs.forEach(input => {
input.addEventListener('focus', () => {
input.parentElement.classList.add('focused');
});
input.addEventListener('blur', () => {
if (!input.value) {
input.parentElement.classList.remove('focused');
}
});
});
// Phone number formatting
const phoneInput = document.querySelector('input[type="tel"]');
phoneInput.addEventListener('input', function(e) {
let value = e.target.value.replace(/\D/g, '');
if (value.length > 0) {
if (value.length <= 1) {
value = '+7 (' + value;
} else if (value.length <= 4) {
value = '+7 (' + value.substring(1);
} else if (value.length <= 7) {
value = '+7 (' + value.substring(1, 4) + ') ' + value.substring(4);
} else if (value.length <= 9) {
value = '+7 (' + value.substring(1, 4) + ') ' + value.substring(4, 7) + '-' + value.substring(7);
} else {
value = '+7 (' + value.substring(1, 4) + ') ' + value.substring(4, 7) + '-' + value.substring(7, 9) + '-' + value.substring(9, 11);
}
}
e.target.value = value;
});
// Form Submission Animation
const contactForm = document.querySelector('.contact-form');
contactForm.addEventListener('submit', function(e) {
e.preventDefault();
const button = this.querySelector('button[type="submit"]');
const originalText = button.textContent;
// Add loading state
button.disabled = true;
button.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Sending...';
// Simulate form submission (replace with actual API call)
setTimeout(() => {
button.innerHTML = '<i class="fas fa-check"></i> Message Sent!';
button.style.backgroundColor = 'var(--success-color)';
// Reset form
setTimeout(() => {
this.reset();
button.disabled = false;
button.textContent = originalText;
button.style.backgroundColor = '';
}, 2000);
}, 1500);
});
// Active Navigation Link on Scroll
const sections = document.querySelectorAll('section');
const navItems = document.querySelectorAll('.nav-links a');
function setActiveNavItem() {
let current = '';
sections.forEach(section => {
const sectionTop = section.offsetTop;
const sectionHeight = section.clientHeight;
if (pageYOffset >= sectionTop - 200) {
current = section.getAttribute('id');
}
});
navItems.forEach(item => {
item.classList.remove('active');
if (item.getAttribute('href') === `#${current}`) {
item.classList.add('active');
}
});
}
window.addEventListener('scroll', setActiveNavItem);
window.addEventListener('load', setActiveNavItem);
// Hover Animations for Cards
document.querySelectorAll('.method-card, .exam-card, .success-card').forEach(card => {
card.addEventListener('mouseenter', () => {
card.style.transform = 'translateY(-10px)';
card.style.boxShadow = 'var(--shadow-lg)';
});
card.addEventListener('mouseleave', () => {
card.style.transform = 'translateY(0)';
card.style.boxShadow = 'var(--shadow)';
});
});
// Add animation classes
document.addEventListener('DOMContentLoaded', () => {
// Animate title on load
const mainTitle = document.querySelector('.main-title');
if (mainTitle) {
mainTitle.classList.add('animate-in');
}
// Animate university logos
const logos = document.querySelectorAll('.university-logos img');
logos.forEach((logo, index) => {
setTimeout(() => {
logo.style.opacity = '1';
}, index * 200);
});
});
// Language switcher
const langSwitcher = document.querySelector('.lang-switch');
if (langSwitcher) {
langSwitcher.addEventListener('click', (e) => {
if (e.target.tagName === 'A') {
e.preventDefault();
langSwitcher.querySelectorAll('a').forEach(link => {
link.classList.remove('active');
});
e.target.classList.add('active');
// Here you would typically handle language change
console.log('Language changed to:', e.target.textContent);
}
});
}
// Parallax Effect for Hero Section
const heroContent = document.querySelector('.hero-content');
const shapes = document.querySelectorAll('.shape');
window.addEventListener('scroll', () => {
const scrolled = window.pageYOffset;
heroContent.style.transform = `translateY(${scrolled * 0.3}px)`;
shapes.forEach(shape => {
shape.style.transform = `translateY(${scrolled * 0.4}px)`;
});
});
// Service Card Hover Effect
document.querySelectorAll('.service-card').forEach(card => {
card.addEventListener('mouseenter', (e) => {
const icon = card.querySelector('.card-icon i');
icon.style.transform = 'scale(1.2) rotate(10deg)';
});
card.addEventListener('mouseleave', (e) => {
const icon = card.querySelector('.card-icon i');
icon.style.transform = 'scale(1) rotate(0deg)';
});
});