diff --git a/assets/css/custom.css b/assets/css/custom.css
index 547229e..d52a3ff 100644
--- a/assets/css/custom.css
+++ b/assets/css/custom.css
@@ -1,18 +1,22 @@
:root {
- --primary: #0062ff;
- --primary-dark: #004dc7;
+ --primary: #0072ff;
+ --primary-dark: #0056cc;
--secondary: #10b981;
- --dark: #111827;
- --gray-dark: #374151;
- --gray: #6b7280;
- --gray-light: #f3f4f6;
+ --accent: #f59e0b;
+ --danger: #ef4444;
+ --dark: #0f172a;
+ --gray-dark: #334155;
+ --gray: #64748b;
+ --gray-light: #f1f5f9;
--white: #ffffff;
--font-heading: 'Montserrat', sans-serif;
--font-body: 'Noto Sans SC', sans-serif;
--shadow: 0 10px 30px -5px rgba(0, 0, 0, 0.1);
- --shadow-lg: 0 20px 40px -10px rgba(0, 0, 0, 0.15);
- --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- --radius: 12px;
+ --shadow-lg: 0 20px 50px -10px rgba(0, 0, 0, 0.15);
+ --transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ --radius: 16px;
+ --glass: rgba(255, 255, 255, 0.7);
+ --glass-border: rgba(255, 255, 255, 0.3);
}
* {
@@ -29,7 +33,7 @@ body {
font-family: var(--font-body);
background-color: var(--white);
color: var(--gray-dark);
- line-height: 1.6;
+ line-height: 1.7;
overflow-x: hidden;
}
@@ -37,6 +41,7 @@ h1, h2, h3, h4 {
font-family: var(--font-heading);
color: var(--dark);
font-weight: 700;
+ letter-spacing: -0.02em;
}
a {
@@ -54,39 +59,42 @@ img {
}
.container {
- max-width: 1200px;
+ max-width: 1300px;
margin: 0 auto;
- padding: 0 24px;
+ padding: 0 30px;
}
section {
- padding: 100px 0;
+ padding: 120px 0;
}
.section-header {
text-align: center;
- margin-bottom: 60px;
+ margin-bottom: 80px;
}
.section-header h2 {
- font-size: 2.8rem;
- margin-bottom: 15px;
- position: relative;
+ font-size: 3.2rem;
+ margin-bottom: 20px;
+ background: linear-gradient(135deg, var(--dark), var(--primary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
}
.section-header .line {
- width: 80px;
- height: 5px;
- background: var(--primary);
- margin: 0 auto 20px;
- border-radius: 5px;
+ width: 60px;
+ height: 6px;
+ background: linear-gradient(to right, var(--primary), var(--secondary));
+ margin: 0 auto 25px;
+ border-radius: 50px;
}
.section-header p {
color: var(--gray);
- font-size: 1.15rem;
- max-width: 700px;
+ font-size: 1.2rem;
+ max-width: 750px;
margin: 0 auto;
+ font-weight: 500;
}
/* Buttons */
@@ -94,37 +102,37 @@ section {
display: inline-flex;
align-items: center;
justify-content: center;
- padding: 14px 35px;
- border-radius: var(--radius);
- font-weight: 600;
- font-size: 1rem;
- gap: 10px;
+ padding: 16px 38px;
+ border-radius: 50px;
+ font-weight: 700;
+ font-size: 1.05rem;
+ gap: 12px;
cursor: pointer;
border: none;
transition: var(--transition);
}
.btn-primary {
- background: var(--primary);
+ background: linear-gradient(135deg, var(--primary), var(--primary-dark));
color: var(--white);
+ box-shadow: 0 10px 20px rgba(0, 114, 255, 0.2);
}
.btn-primary:hover {
- background: var(--primary-dark);
- transform: translateY(-3px);
- box-shadow: 0 12px 25px rgba(0, 98, 255, 0.4);
+ transform: translateY(-4px) scale(1.02);
+ box-shadow: 0 15px 30px rgba(0, 114, 255, 0.35);
}
.btn-glass {
- background: rgba(255, 255, 255, 0.15);
- backdrop-filter: blur(12px);
+ background: rgba(255, 255, 255, 0.1);
+ backdrop-filter: blur(15px);
color: var(--white);
- border: 1px solid rgba(255, 255, 255, 0.3);
+ border: 1px solid rgba(255, 255, 255, 0.2);
}
.btn-glass:hover {
- background: rgba(255, 255, 255, 0.25);
- transform: translateY(-3px);
+ background: rgba(255, 255, 255, 0.2);
+ transform: translateY(-4px);
}
.btn-outline {
@@ -136,7 +144,7 @@ section {
.btn-outline:hover {
background: var(--primary);
color: white;
- transform: translateY(-3px);
+ transform: translateY(-4px);
}
.btn-block {
@@ -150,15 +158,16 @@ section {
left: 0;
width: 100%;
z-index: 1000;
- padding: 25px 0;
+ padding: 30px 0;
transition: var(--transition);
}
.navbar.scrolled {
- background: rgba(255, 255, 255, 0.95);
- backdrop-filter: blur(15px);
- padding: 15px 0;
- box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08);
+ background: rgba(255, 255, 255, 0.85);
+ backdrop-filter: blur(20px);
+ padding: 18px 0;
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.05);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
}
.navbar .container {
@@ -168,54 +177,81 @@ section {
}
.logo {
- font-size: 1.6rem;
+ font-size: 1.8rem;
font-weight: 800;
- color: var(--primary);
+ color: var(--dark);
display: flex;
align-items: center;
gap: 12px;
}
.logo img {
- border-radius: 8px;
+ border-radius: 12px;
+ background: white;
+ padding: 2px;
+ box-shadow: var(--shadow);
}
.nav-links {
display: flex;
align-items: center;
- gap: 35px;
+ gap: 40px;
}
.nav-links a {
color: var(--dark);
- font-weight: 600;
+ font-weight: 700;
font-size: 1rem;
+ position: relative;
+}
+
+.nav-links a::after {
+ content: '';
+ position: absolute;
+ bottom: -5px;
+ left: 0;
+ width: 0;
+ height: 3px;
+ background: var(--primary);
+ transition: var(--transition);
+ border-radius: 5px;
}
.nav-links a:hover {
color: var(--primary);
}
+.nav-links a:hover::after {
+ width: 100%;
+}
+
.nav-cta {
background: var(--primary);
color: white !important;
- padding: 10px 24px;
+ padding: 12px 28px;
border-radius: 50px;
+ box-shadow: 0 5px 15px rgba(0, 114, 255, 0.2);
+}
+
+.nav-cta::after { display: none !important; }
+
+.nav-cta:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 8px 20px rgba(0, 114, 255, 0.3);
}
.mobile-menu-toggle {
display: none;
- font-size: 1.8rem;
+ font-size: 2rem;
cursor: pointer;
color: var(--dark);
- z-index: 1001;
}
/* Hero Section */
.hero-section {
padding: 0;
height: 100vh;
- min-height: 800px;
+ min-height: 850px;
}
.hero-swiper {
@@ -234,58 +270,71 @@ section {
.hero-content {
text-align: center;
color: var(--white);
- max-width: 1000px;
- padding: 0 24px;
+ max-width: 1100px;
+ padding: 0 30px;
+ opacity: 0;
+ transform: translateY(30px);
+ transition: all 1s ease 0.3s;
+}
+
+.swiper-slide-active .hero-content {
+ opacity: 1;
+ transform: translateY(0);
}
.hero-content h1 {
- font-size: 4.5rem;
+ font-size: 5rem;
color: white;
- margin-bottom: 25px;
- text-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
- line-height: 1.2;
+ margin-bottom: 30px;
+ text-shadow: 0 15px 45px rgba(0, 0, 0, 0.5);
+ line-height: 1.1;
+ font-weight: 800;
}
.hero-content p {
- font-size: 1.4rem;
- margin-bottom: 45px;
+ font-size: 1.5rem;
+ margin-bottom: 50px;
opacity: 0.95;
- max-width: 800px;
+ max-width: 850px;
margin-left: auto;
margin-right: auto;
+ line-height: 1.6;
}
.hero-btns {
display: flex;
justify-content: center;
- gap: 25px;
+ gap: 30px;
}
.badge {
display: inline-block;
- padding: 6px 18px;
- background: var(--primary);
+ padding: 8px 22px;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
border-radius: 50px;
- font-size: 0.9rem;
+ font-size: 0.95rem;
font-weight: 800;
text-transform: uppercase;
- margin-bottom: 25px;
- letter-spacing: 1.5px;
+ margin-bottom: 30px;
+ letter-spacing: 2px;
+ color: white;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
/* Stats */
.stats-section {
background: var(--dark);
- padding: 80px 0;
- margin-top: -80px;
+ padding: 90px 0;
+ margin-top: -90px;
position: relative;
z-index: 10;
- border-radius: var(--radius);
- width: 95%;
- max-width: 1200px;
+ border-radius: 30px;
+ width: 92%;
+ max-width: 1300px;
margin-left: auto;
margin-right: auto;
box-shadow: var(--shadow-lg);
+ border: 1px solid rgba(255, 255, 255, 0.05);
}
.stats-grid {
@@ -295,120 +344,152 @@ section {
}
.stat-item h3 {
- color: var(--primary);
- font-size: 3rem;
- margin-bottom: 8px;
+ color: var(--white);
+ font-size: 3.5rem;
+ margin-bottom: 10px;
+ background: linear-gradient(135deg, var(--white), var(--primary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
}
.stat-item p {
- color: rgba(255, 255, 255, 0.8);
- font-size: 1rem;
- font-weight: 500;
- letter-spacing: 0.5px;
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 1.1rem;
+ font-weight: 600;
+ letter-spacing: 1px;
}
/* Services */
.services-grid {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
- gap: 30px;
+ grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
+ gap: 40px;
}
.service-card {
background: var(--white);
- padding: 50px 40px;
+ padding: 60px 45px;
border-radius: var(--radius);
box-shadow: var(--shadow);
transition: var(--transition);
border: 1px solid var(--gray-light);
display: flex;
flex-direction: column;
+ position: relative;
+ overflow: hidden;
+}
+
+.service-card::after {
+ content: '';
+ position: absolute;
+ top: 0; left: 0; width: 100%; height: 5px;
+ background: var(--primary);
+ transform: scaleX(0);
+ transition: var(--transition);
+ transform-origin: left;
}
.service-card:hover {
- transform: translateY(-12px);
+ transform: translateY(-15px);
box-shadow: var(--shadow-lg);
- border-color: var(--primary);
+ border-color: transparent;
+}
+
+.service-card:hover::after {
+ transform: scaleX(1);
}
.icon-box {
- width: 80px;
- height: 80px;
- background: rgba(0, 98, 255, 0.08);
+ width: 90px;
+ height: 90px;
+ background: var(--gray-light);
color: var(--primary);
display: flex;
align-items: center;
justify-content: center;
- font-size: 2.2rem;
- border-radius: 20px;
- margin-bottom: 30px;
+ font-size: 2.5rem;
+ border-radius: 24px;
+ margin-bottom: 35px;
transition: var(--transition);
}
+.service-card:nth-child(1) .icon-box { color: #0072ff; background: rgba(0, 114, 255, 0.08); }
+.service-card:nth-child(2) .icon-box { color: #10b981; background: rgba(16, 185, 129, 0.08); }
+.service-card:nth-child(3) .icon-box { color: #f59e0b; background: rgba(245, 158, 11, 0.08); }
+.service-card:nth-child(4) .icon-box { color: #6366f1; background: rgba(99, 102, 241, 0.08); }
+.service-card:nth-child(5) .icon-box { color: #ec4899; background: rgba(236, 72, 153, 0.08); }
+.service-card:nth-child(6) .icon-box { color: #14b8a6; background: rgba(20, 184, 166, 0.08); }
+
.service-card:hover .icon-box {
+ transform: rotateY(180deg);
background: var(--primary);
- color: white;
+ color: white !important;
}
.service-card h3 {
- font-size: 1.5rem;
- margin-bottom: 20px;
+ font-size: 1.6rem;
+ margin-bottom: 25px;
}
.service-card p {
color: var(--gray);
- margin-bottom: 25px;
+ margin-bottom: 30px;
+ font-size: 1.05rem;
}
.service-list {
margin-top: auto;
- padding-top: 20px;
+ padding-top: 25px;
border-top: 1px solid var(--gray-light);
}
.service-list li {
display: flex;
align-items: center;
- gap: 12px;
- margin-bottom: 12px;
- font-size: 0.95rem;
- font-weight: 500;
+ gap: 15px;
+ margin-bottom: 15px;
+ font-size: 1rem;
+ font-weight: 600;
}
.service-list li i {
color: var(--secondary);
- font-size: 0.8rem;
+ font-size: 0.9rem;
}
/* Portfolio */
.portfolio-filters {
display: flex;
justify-content: center;
- gap: 15px;
- margin-bottom: 50px;
+ gap: 20px;
+ margin-bottom: 60px;
flex-wrap: wrap;
}
.filter-btn {
- padding: 10px 28px;
- background: var(--gray-light);
- border: none;
+ padding: 12px 32px;
+ background: var(--white);
+ border: 1px solid var(--gray-light);
border-radius: 50px;
cursor: pointer;
font-weight: 700;
transition: var(--transition);
- color: var(--gray-dark);
+ color: var(--gray);
+ box-shadow: var(--shadow);
}
.filter-btn.active, .filter-btn:hover {
background: var(--primary);
color: white;
+ border-color: var(--primary);
+ transform: translateY(-2px);
+ box-shadow: 0 8px 20px rgba(0, 114, 255, 0.2);
}
.portfolio-grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
- gap: 35px;
+ grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
+ gap: 40px;
}
.portfolio-item {
@@ -417,6 +498,7 @@ section {
box-shadow: var(--shadow);
background: white;
transition: var(--transition);
+ border: 1px solid var(--gray-light);
}
.portfolio-img-wrapper {
@@ -438,75 +520,81 @@ section {
left: 0;
width: 100%;
height: 100%;
- background: rgba(0, 98, 255, 0.92);
+ background: linear-gradient(to bottom, rgba(0, 114, 255, 0.8), rgba(15, 23, 42, 0.95));
display: flex;
align-items: center;
justify-content: center;
text-align: center;
- padding: 40px;
+ padding: 50px;
opacity: 0;
transition: var(--transition);
color: white;
+ transform: translateY(20px);
}
.portfolio-item:hover .portfolio-overlay {
opacity: 1;
+ transform: translateY(0);
}
.portfolio-item:hover .portfolio-img-wrapper img {
- transform: scale(1.15);
+ transform: scale(1.1);
}
.overlay-content h3 {
color: white;
- font-size: 1.6rem;
- margin-bottom: 15px;
+ font-size: 1.8rem;
+ margin-bottom: 20px;
}
.overlay-content p {
- font-size: 1rem;
+ font-size: 1.1rem;
opacity: 0.9;
+ line-height: 1.5;
}
.view-details {
display: inline-flex;
align-items: center;
- gap: 10px;
- margin-top: 25px;
+ gap: 12px;
+ margin-top: 30px;
color: white;
- border: 1px solid white;
- padding: 8px 20px;
+ border: 2px solid rgba(255, 255, 255, 0.4);
+ padding: 10px 28px;
border-radius: 50px;
- font-weight: 600;
+ font-weight: 700;
+ background: rgba(255, 255, 255, 0.1);
+ backdrop-filter: blur(10px);
}
.view-details:hover {
background: white;
color: var(--primary);
+ border-color: white;
}
.portfolio-info {
- padding: 25px;
+ padding: 30px;
}
.portfolio-info h4 {
- font-size: 1.25rem;
- margin-bottom: 8px;
+ font-size: 1.4rem;
+ margin-bottom: 10px;
}
.portfolio-info span {
color: var(--primary);
- font-weight: 700;
- font-size: 0.85rem;
+ font-weight: 800;
+ font-size: 0.9rem;
text-transform: uppercase;
- letter-spacing: 1px;
+ letter-spacing: 1.5px;
}
/* About */
.about-flex {
display: flex;
align-items: flex-start;
- gap: 80px;
+ gap: 100px;
}
.about-image {
@@ -515,7 +603,7 @@ section {
}
.about-image img {
- border-radius: var(--radius);
+ border-radius: 30px;
box-shadow: var(--shadow-lg);
width: 100%;
}
@@ -524,495 +612,656 @@ section {
position: absolute;
bottom: -40px;
right: -40px;
- background: var(--primary);
+ background: var(--dark);
color: white;
- padding: 30px;
- border-radius: var(--radius);
+ padding: 40px;
+ border-radius: 24px;
display: flex;
flex-direction: column;
align-items: center;
- box-shadow: 0 15px 35px rgba(0, 98, 255, 0.4);
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.3);
+ border: 1px solid rgba(255, 255, 255, 0.1);
}
.experience-tag strong {
- font-size: 3rem;
+ font-size: 4rem;
line-height: 1;
+ background: linear-gradient(135deg, var(--white), var(--primary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
}
.experience-tag span {
- font-weight: 700;
- font-size: 1rem;
- margin-top: 5px;
+ font-weight: 800;
+ font-size: 1.1rem;
+ margin-top: 10px;
+ letter-spacing: 1px;
}
.about-text {
- flex: 1.4;
+ flex: 1.3;
}
.subtitle {
color: var(--primary);
- font-weight: 800;
+ font-weight: 900;
text-transform: uppercase;
- letter-spacing: 3px;
+ letter-spacing: 4px;
display: block;
- margin-bottom: 15px;
- font-size: 0.9rem;
+ margin-bottom: 20px;
+ font-size: 1rem;
}
.about-text h2 {
- font-size: 3rem;
- margin-bottom: 30px;
+ font-size: 3.5rem;
+ margin-bottom: 35px;
line-height: 1.2;
}
.about-text p {
- font-size: 1.1rem;
- margin-bottom: 20px;
+ font-size: 1.2rem;
+ margin-bottom: 25px;
color: var(--gray-dark);
}
+.skills-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 25px;
+ margin: 40px 0;
+}
+
+.skill-item {
+ display: flex;
+ align-items: center;
+ gap: 15px;
+ font-weight: 700;
+ font-size: 1.05rem;
+ padding: 15px 25px;
+ background: var(--gray-light);
+ border-radius: 15px;
+ transition: var(--transition);
+}
+
+.skill-item:hover {
+ background: white;
+ box-shadow: var(--shadow);
+ transform: translateX(10px);
+}
+
+/* Individual Icon Colors */
+.skill-item .fa-php { color: #777bb3; font-size: 1.5rem; }
+.skill-item .fa-js { color: #f7df1e; font-size: 1.5rem; }
+.skill-item .fa-database { color: #336791; font-size: 1.5rem; }
+.skill-item .fa-server { color: #ff9900; font-size: 1.5rem; }
+
.milestones {
- margin-top: 45px;
+ margin-top: 50px;
border-top: 2px solid var(--gray-light);
- padding-top: 35px;
+ padding-top: 40px;
}
.milestones h3 {
- margin-bottom: 25px;
- font-size: 1.5rem;
+ margin-bottom: 30px;
+ font-size: 1.8rem;
}
.milestone-item {
display: flex;
- gap: 25px;
- margin-bottom: 20px;
+ gap: 30px;
+ margin-bottom: 25px;
+ padding: 20px;
+ border-radius: 15px;
+ transition: var(--transition);
+}
+
+.milestone-item:hover {
+ background: #f8fafc;
}
.milestone-item .year {
- background: var(--gray-light);
- padding: 5px 15px;
+ background: var(--primary);
+ padding: 8px 20px;
border-radius: 50px;
font-weight: 800;
- color: var(--primary);
+ color: white;
white-space: nowrap;
height: fit-content;
+ font-size: 0.9rem;
}
.milestone-item p {
margin: 0;
- font-size: 1rem;
- font-weight: 500;
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: var(--dark);
}
.about-btns {
display: flex;
- gap: 20px;
- margin-top: 40px;
+ gap: 25px;
+ margin-top: 50px;
}
/* Process Section */
.process-section {
- background: var(--white);
+ background: #f8fafc;
}
.process-steps {
display: grid;
grid-template-columns: repeat(5, 1fr);
- gap: 20px;
+ gap: 30px;
}
.step-card {
text-align: center;
position: relative;
- padding: 30px 20px;
+ padding: 40px 25px;
+ background: white;
+ border-radius: 20px;
+ box-shadow: var(--shadow);
+ transition: var(--transition);
+}
+
+.step-card:hover {
+ transform: translateY(-10px);
+ box-shadow: var(--shadow-lg);
}
.step-num {
- width: 60px;
- height: 60px;
+ width: 70px;
+ height: 70px;
background: var(--gray-light);
color: var(--primary);
- border-radius: 50%;
+ border-radius: 24px;
display: flex;
align-items: center;
justify-content: center;
- font-size: 1.5rem;
- font-weight: 800;
- margin: 0 auto 25px;
+ font-size: 1.8rem;
+ font-weight: 900;
+ margin: 0 auto 30px;
transition: var(--transition);
}
.step-card:hover .step-num {
background: var(--primary);
color: white;
- transform: scale(1.1);
+ transform: rotate(10deg);
}
.step-card h3 {
- font-size: 1.25rem;
- margin-bottom: 15px;
+ font-size: 1.4rem;
+ margin-bottom: 20px;
}
.step-card p {
- font-size: 0.95rem;
+ font-size: 1rem;
color: var(--gray);
}
/* Testimonials */
.testimonials-section {
- background: #f8fafc;
+ background: white;
}
.testimonial-card {
- background: white;
- padding: 50px 40px;
- border-radius: var(--radius);
+ background: #f8fafc;
+ padding: 60px 50px;
+ border-radius: 30px;
box-shadow: var(--shadow);
- margin: 25px;
+ margin: 30px;
+ border: 1px solid var(--gray-light);
}
.quote-icon {
- font-size: 2.5rem;
- color: rgba(0, 98, 255, 0.08);
- margin-bottom: 25px;
+ font-size: 3rem;
+ color: var(--primary);
+ opacity: 0.15;
+ margin-bottom: 30px;
}
.testimonial-card p {
- font-size: 1.1rem;
+ font-size: 1.2rem;
font-style: italic;
- margin-bottom: 30px;
+ margin-bottom: 40px;
+ color: var(--dark);
+ font-weight: 500;
}
.client-info {
display: flex;
align-items: center;
- gap: 15px;
- margin-top: 30px;
+ gap: 20px;
+ margin-top: 40px;
}
.client-info img {
- width: 60px;
- height: 60px;
- border-radius: 50%;
+ width: 70px;
+ height: 70px;
+ border-radius: 24px;
object-fit: cover;
- border: 3px solid var(--gray-light);
+ border: 4px solid white;
+ box-shadow: var(--shadow);
}
.client-info h4 {
margin: 0;
- font-size: 1.1rem;
+ font-size: 1.25rem;
}
.client-info span {
- color: var(--gray);
- font-size: 0.9rem;
+ color: var(--primary);
+ font-size: 1rem;
+ font-weight: 700;
}
/* Contact Revamp */
.contact-section {
- background: #f0f4f8;
+ background: var(--dark);
+ color: white;
position: relative;
overflow: hidden;
+ border-radius: 50px 50px 0 0;
}
.contact-section::before {
content: '';
position: absolute;
- top: -10%;
- right: -5%;
- width: 400px;
- height: 400px;
- background: rgba(0, 98, 255, 0.03);
+ top: -15%;
+ right: -10%;
+ width: 600px;
+ height: 600px;
+ background: radial-gradient(circle, rgba(0, 114, 255, 0.1) 0%, transparent 70%);
border-radius: 50%;
- z-index: 0;
}
.contact-wrapper {
display: grid;
- grid-template-columns: 1fr 1.2fr;
- gap: 60px;
+ grid-template-columns: 1fr 1.3fr;
+ gap: 80px;
position: relative;
z-index: 1;
}
-.contact-visual {
- display: flex;
- flex-direction: column;
- justify-content: center;
-}
-
.contact-header h2 {
- font-size: 3.5rem;
+ font-size: 4rem;
line-height: 1.1;
- margin-bottom: 25px;
+ margin-bottom: 30px;
+ color: white;
}
.contact-header p {
- font-size: 1.2rem;
- color: var(--gray);
- margin-bottom: 50px;
+ font-size: 1.3rem;
+ color: rgba(255, 255, 255, 0.7);
+ margin-bottom: 60px;
}
.contact-methods {
display: grid;
grid-template-columns: 1fr 1fr;
- gap: 25px;
+ gap: 30px;
}
.method-card {
- background: white;
- padding: 30px;
- border-radius: 20px;
- box-shadow: var(--shadow);
+ background: rgba(255, 255, 255, 0.05);
+ backdrop-filter: blur(10px);
+ padding: 40px 30px;
+ border-radius: 24px;
+ border: 1px solid rgba(255, 255, 255, 0.1);
transition: var(--transition);
}
.method-card:hover {
- transform: translateY(-5px);
- box-shadow: var(--shadow-lg);
+ background: rgba(255, 255, 255, 0.1);
+ transform: translateY(-8px);
}
.method-card i {
- font-size: 2rem;
+ font-size: 2.5rem;
color: var(--primary);
- margin-bottom: 20px;
+ margin-bottom: 25px;
}
.method-card h3 {
- font-size: 1.2rem;
- margin-bottom: 10px;
+ font-size: 1.4rem;
+ margin-bottom: 12px;
+ color: white;
}
.method-card p {
- font-size: 0.9rem;
- color: var(--gray);
- margin-bottom: 15px;
+ font-size: 1rem;
+ color: rgba(255, 255, 255, 0.6);
+ margin-bottom: 20px;
}
.method-card a, .method-card span {
- font-weight: 700;
- color: var(--dark);
- font-size: 1rem;
+ font-weight: 800;
+ color: white;
+ font-size: 1.1rem;
}
.contact-form-container {
background: white;
- padding: 60px;
- border-radius: 30px;
+ padding: 80px;
+ border-radius: 40px;
box-shadow: var(--shadow-lg);
- border: 1px solid rgba(0, 98, 255, 0.05);
}
-.modern-form .form-title {
- margin-bottom: 40px;
-}
+.modern-form .form-title h3 { color: var(--dark); font-size: 2.2rem; }
+.modern-form .form-title p { color: var(--gray); font-size: 1.1rem; }
-.modern-form .form-title h3 {
- font-size: 1.8rem;
- margin-bottom: 8px;
-}
-
-.modern-form .form-title p {
- color: var(--gray);
-}
-
-.input-group {
- position: relative;
- margin-bottom: 35px;
-}
-
-.input-group input,
-.input-group textarea,
-.input-group select {
- width: 100%;
- padding: 15px 0;
- font-size: 1.1rem;
- border: none;
- border-bottom: 2px solid var(--gray-light);
- background: transparent;
- outline: none;
- transition: var(--transition);
- color: var(--dark);
-}
-
-.input-group label {
- position: absolute;
- top: 15px;
- left: 0;
- font-size: 1.1rem;
- color: var(--gray);
- pointer-events: none;
- transition: var(--transition);
-}
-
-.input-group input:focus ~ label,
-.input-group input:valid ~ label,
-.input-group textarea:focus ~ label,
-.input-group textarea:valid ~ label,
-.input-group select:focus ~ label,
-.input-group select:not([value=""]):valid ~ label {
- top: -15px;
- font-size: 0.85rem;
- color: var(--primary);
- font-weight: 700;
-}
-
-.input-group input:focus,
-.input-group textarea:focus,
-.input-group select:focus {
- border-bottom-color: var(--primary);
-}
+.input-group label { color: var(--gray); font-weight: 600; }
+.input-group input, .input-group textarea, .input-group select { border-bottom: 2px solid #e2e8f0; color: var(--dark); font-weight: 600; }
.btn-submit {
- width: 100%;
- padding: 18px;
- background: var(--primary);
- color: white;
- border: none;
- border-radius: 15px;
- font-size: 1.1rem;
- font-weight: 700;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 15px;
- cursor: pointer;
- transition: var(--transition);
- margin-top: 20px;
-}
-
-.btn-submit:hover {
- background: var(--primary-dark);
- transform: scale(1.02);
- box-shadow: 0 15px 30px rgba(0, 98, 255, 0.3);
+ border-radius: 50px;
+ padding: 20px;
+ font-size: 1.2rem;
}
/* Footer */
footer {
background: #050810;
color: white;
- padding: 100px 0 50px;
+ padding: 120px 0 60px;
}
.footer-top {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
- gap: 50px;
- padding-bottom: 60px;
- border-bottom: 1px solid rgba(255, 255, 255, 0.08);
+ gap: 80px;
+ padding-bottom: 80px;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.footer-brand .logo {
- font-size: 2rem;
- margin-bottom: 25px;
+ font-size: 2.5rem;
+ margin-bottom: 30px;
}
.footer-brand p {
- opacity: 0.7;
- max-width: 400px;
- font-size: 1.1rem;
+ opacity: 0.6;
+ max-width: 450px;
+ font-size: 1.2rem;
+ line-height: 1.8;
}
.footer-nav h4, .footer-social h4 {
color: white;
- margin-bottom: 30px;
- font-size: 1.25rem;
+ margin-bottom: 40px;
+ font-size: 1.4rem;
+ text-transform: uppercase;
+ letter-spacing: 2px;
}
.footer-nav a {
- display: block;
- color: rgba(255, 255, 255, 0.7);
- margin-bottom: 15px;
- font-weight: 500;
-}
-
-.footer-nav a:hover {
- color: var(--primary);
- padding-left: 10px;
-}
-
-.social-icons {
- display: flex;
- gap: 20px;
+ font-size: 1.1rem;
+ margin-bottom: 20px;
}
.social-icons a {
- width: 50px;
- height: 50px;
- background: rgba(255, 255, 255, 0.05);
- border-radius: 15px;
- display: flex;
- align-items: center;
- justify-content: center;
- color: white;
- font-size: 1.3rem;
- transition: var(--transition);
-}
-
-.social-icons a:hover {
- background: var(--primary);
- transform: translateY(-5px);
+ width: 60px;
+ height: 60px;
+ border-radius: 20px;
+ font-size: 1.6rem;
}
.footer-bottom {
- padding-top: 50px;
+ padding-top: 60px;
+ opacity: 0.4;
+ font-weight: 600;
+}
+
+/* Toast */
+.toast {
+ position: fixed;
+ bottom: 40px;
+ right: 40px;
+ padding: 20px 40px;
+ background: var(--dark);
+ color: white;
+ border-radius: 50px;
+ font-weight: 700;
+ box-shadow: var(--shadow-lg);
+ display: none;
+ z-index: 2000;
+}
+
+/* Language Switcher */
+.lang-switcher {
+ position: relative;
+ display: inline-block;
+ margin-right: 20px;
+}
+
+.lang-btn {
display: flex;
- justify-content: space-between;
align-items: center;
- opacity: 0.5;
+ gap: 8px;
+ background: rgba(255, 255, 255, 0.1);
+ border: 1px solid rgba(0, 0, 0, 0.05);
+ padding: 8px 15px;
+ border-radius: 50px;
+ cursor: pointer;
+ font-weight: 700;
+ font-size: 0.9rem;
+ transition: var(--transition);
+ color: var(--dark);
+}
+
+.navbar.scrolled .lang-btn {
+ background: var(--gray-light);
+}
+
+.lang-btn:hover {
+ background: var(--primary);
+ color: white;
+}
+
+.lang-dropdown {
+ position: absolute;
+ top: 100%;
+ right: 0;
+ margin-top: 15px;
+ background: white;
+ min-width: 180px;
+ border-radius: 20px;
+ box-shadow: var(--shadow-lg);
+ padding: 15px;
+ opacity: 0;
+ visibility: hidden;
+ transform: translateY(10px);
+ transition: var(--transition);
+ z-index: 1001;
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 5px;
+}
+
+.lang-switcher:hover .lang-dropdown {
+ opacity: 1;
+ visibility: visible;
+ transform: translateY(0);
+}
+
+.lang-item {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 10px 15px;
+ border-radius: 12px;
+ color: var(--dark);
+ font-weight: 600;
font-size: 0.95rem;
+ transition: var(--transition);
+}
+
+.lang-item:hover {
+ background: var(--gray-light);
+ color: var(--primary);
+}
+
+.lang-item span.flag {
+ font-size: 1.2rem;
+}
+
+/* Personalized Contact Form */
+.contact-form-container {
+ background: rgba(255, 255, 255, 0.95);
+ backdrop-filter: blur(20px);
+ padding: 60px;
+ border-radius: 40px;
+ box-shadow: 0 30px 60px rgba(0, 0, 0, 0.12);
+ border: 1px solid rgba(255, 255, 255, 0.5);
+ position: relative;
+ overflow: hidden;
+}
+
+.contact-form-container::before {
+ content: '';
+ position: absolute;
+ top: -50px;
+ right: -50px;
+ width: 150px;
+ height: 150px;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ opacity: 0.1;
+ border-radius: 50%;
+ filter: blur(40px);
+}
+
+.form-title h3 {
+ font-size: 2.5rem !important;
+ background: linear-gradient(135deg, var(--dark), var(--primary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ margin-bottom: 15px;
+}
+
+.modern-form .input-group {
+ margin-bottom: 35px;
+ position: relative;
+}
+
+.modern-form input, .modern-form textarea, .modern-form select {
+ width: 100%;
+ padding: 15px 0;
+ background: transparent;
+ border: none;
+ border-bottom: 2px solid #e2e8f0;
+ outline: none;
+ font-size: 1.1rem;
+ color: var(--dark);
+ font-weight: 500;
+ transition: var(--transition);
+}
+
+.modern-form label {
+ position: absolute;
+ top: 15px;
+ left: 0;
+ pointer-events: none;
+ transition: var(--transition);
+ color: var(--gray);
+ font-weight: 600;
+}
+
+.modern-form input:focus ~ label,
+.modern-form input:valid ~ label,
+.modern-form textarea:focus ~ label,
+.modern-form textarea:valid ~ label,
+.modern-form select:focus ~ label,
+.modern-form select:valid ~ label,
+.modern-form select:not([value=""]) ~ label {
+ top: -12px;
+ font-size: 0.85rem;
+ color: var(--primary);
+}
+
+.modern-form input:focus, .modern-form textarea:focus, .modern-form select:focus {
+ border-bottom-color: var(--primary);
+}
+
+.btn-submit {
+ width: 100%;
+ padding: 22px;
+ border-radius: 100px;
+ background: linear-gradient(135deg, var(--dark), #1e293b);
+ color: white;
+ font-weight: 800;
+ font-size: 1.2rem;
+ border: none;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 15px;
+ transition: var(--transition);
+ box-shadow: 0 10px 30px rgba(15, 23, 42, 0.3);
+ margin-top: 20px;
+}
+
+.btn-submit:hover {
+ transform: translateY(-5px);
+ background: linear-gradient(135deg, var(--primary), var(--primary-dark));
+ box-shadow: 0 20px 40px rgba(0, 114, 255, 0.4);
+}
+
+.btn-submit i {
+ font-size: 1rem;
+ transition: var(--transition);
+}
+
+.btn-submit:hover i {
+ transform: translateX(5px) rotate(-15deg);
}
/* Mobile Responsive */
@media (max-width: 1200px) {
- .hero-content h1 { font-size: 3.5rem; }
- .about-flex { gap: 40px; }
+ .hero-content h1 { font-size: 4rem; }
+ .about-flex { gap: 50px; }
.process-steps { grid-template-columns: repeat(3, 1fr); }
- .contact-header h2 { font-size: 2.8rem; }
+ .contact-header h2 { font-size: 3.2rem; }
}
@media (max-width: 992px) {
- .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 40px; }
+ .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 50px; }
.about-flex { flex-direction: column; }
- .about-image { width: 100%; max-width: 600px; margin: 0 auto 60px; }
- .experience-tag { right: 0; bottom: -20px; }
+ .about-image { width: 100%; max-width: 650px; margin: 0 auto 80px; }
+ .experience-tag { right: 0; bottom: -30px; padding: 30px; }
+ .experience-tag strong { font-size: 3rem; }
.contact-wrapper { grid-template-columns: 1fr; }
- .footer-top { grid-template-columns: 1fr; gap: 40px; text-align: center; }
- .footer-brand p { margin: 25px auto; }
+ .footer-top { grid-template-columns: 1fr; text-align: center; }
+ .footer-brand p { margin: 30px auto; }
.social-icons { justify-content: center; }
- .footer-bottom { flex-direction: column; gap: 20px; text-align: center; }
.nav-links {
position: fixed;
top: 0;
right: -100%;
- width: 80%;
+ width: 85%;
height: 100vh;
background: white;
flex-direction: column;
justify-content: center;
- transition: var(--transition);
- box-shadow: -10px 0 30px rgba(0,0,0,0.1);
+ box-shadow: -20px 0 60px rgba(0,0,0,0.1);
}
- .nav-links.active {
- right: 0;
- }
-
- .mobile-menu-toggle {
- display: block;
- }
+ .nav-links.active { right: 0; }
+ .mobile-menu-toggle { display: block; }
}
@media (max-width: 768px) {
- .hero-content h1 { font-size: 2.8rem; }
- .hero-content p { font-size: 1.1rem; }
- .hero-btns { flex-direction: column; }
- .section-header h2 { font-size: 2.2rem; }
+ section { padding: 80px 0; }
+ .hero-content h1 { font-size: 3rem; }
+ .hero-content p { font-size: 1.2rem; }
+ .section-header h2 { font-size: 2.5rem; }
.process-steps { grid-template-columns: 1fr; }
- .about-text h2 { font-size: 2.2rem; }
+ .about-text h2 { font-size: 2.5rem; }
.skills-grid { grid-template-columns: 1fr; }
.portfolio-grid { grid-template-columns: 1fr; }
.contact-methods { grid-template-columns: 1fr; }
- .contact-form-container { padding: 40px 25px; }
-}
\ No newline at end of file
+ .contact-form-container { padding: 50px 30px; }
+ .contact-header h2 { font-size: 2.5rem; }
+}
diff --git a/assets/js/main.js b/assets/js/main.js
index c01a20a..9662dc6 100644
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -2,10 +2,12 @@ document.addEventListener('DOMContentLoaded', () => {
// Navbar Scroll Effect
const navbar = document.querySelector('.navbar');
window.addEventListener('scroll', () => {
- if (window.scrollY > 50) {
- navbar.classList.add('scrolled');
- } else {
- navbar.classList.remove('scrolled');
+ if (navbar) {
+ if (window.scrollY > 50) {
+ navbar.classList.add('scrolled');
+ } else {
+ navbar.classList.remove('scrolled');
+ }
}
});
@@ -35,38 +37,7 @@ document.addEventListener('DOMContentLoaded', () => {
autoplay: {
delay: 6000,
disableOnInteraction: false,
- },
- pagination: {
- el: '.swiper-pagination',
- clickable: true,
- },
- navigation: {
- nextEl: '.swiper-button-next',
- prevEl: '.swiper-button-prev',
- },
- });
-
- // Testimonials Swiper
- const testimonialsSwiper = new Swiper('.testimonials-swiper', {
- slidesPerView: 1,
- spaceBetween: 30,
- loop: true,
- autoplay: {
- delay: 5000,
- disableOnInteraction: false,
- },
- pagination: {
- el: '.swiper-pagination',
- clickable: true,
- },
- breakpoints: {
- 768: {
- slidesPerView: 2,
- },
- 1024: {
- slidesPerView: 3,
- },
- },
+ }
});
// Portfolio Filtering
@@ -75,7 +46,6 @@ document.addEventListener('DOMContentLoaded', () => {
filterBtns.forEach(btn => {
btn.addEventListener('click', () => {
- // Update active button
filterBtns.forEach(b => b.classList.remove('active'));
btn.classList.add('active');
@@ -96,16 +66,30 @@ document.addEventListener('DOMContentLoaded', () => {
const contactForm = document.getElementById('contactForm');
const toast = document.getElementById('toast');
+ // Simple I18N for JS messages based on html lang attribute
+ const htmlLang = document.documentElement.lang || 'en';
+ const messages = {
+ en: { sending: 'Sending...', success: 'Message sent successfully!', error: 'Failed to send. Please try again.' },
+ zh: { sending: '发送中...', success: '消息已成功发送!', error: '发送失败,请稍后再试。' },
+ ja: { sending: '送信中...', success: '送信が完了しました!', error: '送信に失敗しました。' },
+ ko: { sending: '전송 중...', success: '메시지가 성공적으로 전송되었습니다!', error: '전송 실패. 다시 시도하십시오.' },
+ de: { sending: 'Senden...', success: 'Nachricht erfolgreich gesendet!', error: 'Fehler beim Senden.' },
+ fr: { sending: 'Envoi...', success: 'Message envoyé avec succès !', error: 'Échec de l\'envoi.' },
+ es: { sending: 'Enviando...', success: '¡Mensaje enviado con éxito!', error: 'Error al enviar.' },
+ ar: { sending: 'جاري الإرسال...', success: 'تم إرسال الرسالة بنجاح!', error: 'فشل الإرسال. يرجى المحاولة مرة أخرى.' }
+ };
+ const msg = messages[htmlLang] || messages['en'];
+
if (contactForm) {
contactForm.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(contactForm);
- const submitBtn = contactForm.querySelector('button[type="submit"]');
- const originalBtnText = submitBtn.innerHTML;
+ const submitBtn = contactForm.querySelector('.btn-submit');
+ const originalBtnContent = submitBtn.innerHTML;
submitBtn.disabled = true;
- submitBtn.innerHTML = ' 发送中...';
+ submitBtn.innerHTML = `${msg.sending} `;
try {
const response = await fetch('contact.php', {
@@ -116,21 +100,22 @@ document.addEventListener('DOMContentLoaded', () => {
const result = await response.json();
if (result.success) {
- showToast('消息已成功发送!我会尽快给您回复。');
+ showToast(msg.success);
contactForm.reset();
} else {
- showToast('发送失败: ' + (result.error || '请稍后再试'));
+ showToast(msg.error + ' ' + (result.error || ''));
}
} catch (error) {
- showToast('无法连接到服务器,请检查网络。');
+ showToast(msg.error);
} finally {
submitBtn.disabled = false;
- submitBtn.innerHTML = originalBtnText;
+ submitBtn.innerHTML = originalBtnContent;
}
});
}
function showToast(message) {
+ if (!toast) return;
toast.innerText = message;
toast.style.display = 'block';
toast.style.animation = 'slideInUp 0.5s ease forwards';
@@ -146,46 +131,38 @@ document.addEventListener('DOMContentLoaded', () => {
// Smooth scroll for nav links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
- e.preventDefault();
-
- // Close mobile menu if open
- if (navLinks.classList.contains('active')) {
- navLinks.classList.remove('active');
- const icon = mobileMenuToggle.querySelector('i');
- icon.classList.replace('fa-times', 'fa-bars');
- }
-
- const target = document.querySelector(this.getAttribute('href'));
- if (target) {
- const offset = 80;
- const bodyRect = document.body.getBoundingClientRect().top;
- const elementRect = target.getBoundingClientRect().top;
- const elementPosition = elementRect - bodyRect;
- const offsetPosition = elementPosition - offset;
-
- window.scrollTo({
- top: offsetPosition,
- behavior: 'smooth'
- });
+ if (this.hash !== "") {
+ e.preventDefault();
+ const target = document.querySelector(this.hash);
+ if (target) {
+ if (navLinks && navLinks.classList.contains('active')) {
+ navLinks.classList.remove('active');
+ const icon = mobileMenuToggle.querySelector('i');
+ icon.classList.replace('fa-times', 'fa-bars');
+ }
+ window.scrollTo({
+ top: target.offsetTop - 80,
+ behavior: 'smooth'
+ });
+ }
}
});
});
});
-// Animation styles
-const style = document.createElement('style');
-style.textContent = `
+const animStyle = document.createElement('style');
+animStyle.textContent = "
@keyframes fadeIn {
- from { opacity: 0; transform: translateY(20px); }
+ from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideInUp {
- from { transform: translateY(100%); opacity: 0; }
+ from { transform: translateY(100%); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
@keyframes slideOutDown {
- from { transform: translateY(0); opacity: 1; }
+ from { transform: translateY(0); opacity: 1; }
to { transform: translateY(100%); opacity: 0; }
}
-`;
-document.head.appendChild(style);
+";
+document.head.appendChild(animStyle);
\ No newline at end of file
diff --git a/assets/logo.svg b/assets/logo.svg
index 06ebd82..2c7c96a 100644
--- a/assets/logo.svg
+++ b/assets/logo.svg
@@ -1,15 +1,29 @@
+
+
This project represents a milestone in $cat development, focusing on delivering exceptional value through technical excellence.