diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index 8bbe0f9..2e2f68a 100644 Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ diff --git a/src/components/GlobeDemo.tsx b/src/components/GlobeDemo.tsx index e9c6308..f72a7fc 100644 --- a/src/components/GlobeDemo.tsx +++ b/src/components/GlobeDemo.tsx @@ -45,10 +45,10 @@ const GlobeDemo: React.FC = () => {

使用鼠标拖拽旋转地球,滚轮缩放

- ✨ 真实地球纹理 + ✨ 真实地球纹理
- 🌍 大气层效果 + 🌍 大气层效果
🔄 自动旋转 diff --git a/src/components/common/ParallaxContainer.tsx b/src/components/common/ParallaxContainer.tsx index 306a7b9..2094581 100644 --- a/src/components/common/ParallaxContainer.tsx +++ b/src/components/common/ParallaxContainer.tsx @@ -32,7 +32,7 @@ const ParallaxContainer: React.FC = ({ children }) => { {/* Floating geometric shapes */}
= ({ children }) => { {/* Gradient glow */}
{ variants={fadeInUp} >
-
+
-

+

{t('about.cards.experience.title')}

@@ -97,9 +97,9 @@ const AboutSection = React.memo(() => { variants={fadeInUp} >

-
+
-

+

{t('about.cards.projects.title')}

@@ -138,7 +138,7 @@ const AboutSection = React.memo(() => {

{Object.entries(advantages).map(([key, value], index) => ( -
+
{ style={{ transform: `translateY(${Number(parallaxY || 0) * 0.6}px)` }} />
@@ -99,15 +99,15 @@ const ContactSection = () => { animate={inView ? { opacity: 1, x: 0 } : { opacity: 0, x: -30 }} transition={{ duration: 0.5 }} > -
+
-

+

{t('contact.info')}

-
+
{

{t('contact.email')}

jimmflyyang@gmail.com @@ -203,9 +203,9 @@ const ContactSection = () => { animate={inView ? { opacity: 1, x: 0 } : { opacity: 0, x: 30 }} transition={{ duration: 0.5, delay: 0.2 }} > -
+
-

+

{t('contact.form.title')}

@@ -253,7 +253,7 @@ const ContactSection = () => { value={formData.name} onChange={handleChange} required - className='w-full px-6 py-4 rounded-2xl bg-gray-800/50 border-2 border-gray-700/50 focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 text-text text-lg transition-all duration-300 group-hover:border-purple-500/50' + className='w-full px-6 py-4 rounded-2xl bg-gray-800/50 border-2 border-gray-700/50 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20 text-text text-lg transition-all duration-300 group-hover:border-primary/50' placeholder='Your Name' />
@@ -272,7 +272,7 @@ const ContactSection = () => { value={formData.email} onChange={handleChange} required - className='w-full px-6 py-4 rounded-2xl bg-gray-800/50 border-2 border-gray-700/50 focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 text-text text-lg transition-all duration-300 group-hover:border-purple-500/50' + className='w-full px-6 py-4 rounded-2xl bg-gray-800/50 border-2 border-gray-700/50 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20 text-text text-lg transition-all duration-300 group-hover:border-primary/50' placeholder='your.email@example.com' />
@@ -291,14 +291,14 @@ const ContactSection = () => { onChange={handleChange} required rows={6} - className='w-full px-6 py-4 rounded-2xl bg-gray-800/50 border-2 border-gray-700/50 focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 text-text text-lg resize-none transition-all duration-300 group-hover:border-purple-500/50' + className='w-full px-6 py-4 rounded-2xl bg-gray-800/50 border-2 border-gray-700/50 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20 text-text text-lg resize-none transition-all duration-300 group-hover:border-primary/50' placeholder='Your message...' />
{
{/* Modern timeline decoration */} -
-
+
+
{/* Enhanced company and position information */}
-

+

{t(experience.company)}

-

+

{t(experience.position)}

@@ -83,7 +83,7 @@ const ExperienceSection = React.memo(() => { {/* Enhanced achievements */}
-
+
{t('experience.achievements')}
    @@ -94,7 +94,7 @@ const ExperienceSection = React.memo(() => { variants={fadeInUp} transition={{ delay: index * 0.2 + achievementIndex * 0.1 }} > - + @@ -114,7 +114,7 @@ const ExperienceSection = React.memo(() => { {experience.technologies.map((tech, techIndex) => ( { return (
    {/* Background effect layer - contains gradient background and multi-layer parallax glow effects */} - {/* Main background gradient - sophisticated dark gradient */} -
    + {/* Main background gradient - Apple-inspired subtle gradient */} +
    - {/* Enhanced glow effects with modern colors */} + {/* Refined glow effects with Apple-style colors */}
    @@ -66,7 +66,7 @@ const HeroSection = React.memo(() => { className='text-6xl md:text-8xl font-black mb-8 heading-modern tracking-tighter' variants={fadeInUp} > - + {name} @@ -98,14 +98,14 @@ const HeroSection = React.memo(() => { > {cta} {contactMe} @@ -113,7 +113,7 @@ const HeroSection = React.memo(() => { { {/* 3D globe container - enhanced with glow effect */}
    {/* Ambient glow behind globe */} -
    +
    {/* Three.js Canvas - 3D rendering canvas */} { {/* Enhanced lighting setup */} - - + + {/* 3D globe model component */} {
    {/* Background decorative elements - Parallax effect */}
    {
    @@ -110,7 +110,7 @@ const ProjectsSection = () => { ? 'bg-cyan-500/10' : index % 3 === 1 ? 'bg-purple-500/10' - : 'bg-emerald-500/10' + : 'bg-gray-700/10' }`} > {project.image} @@ -120,10 +120,10 @@ const ProjectsSection = () => {

    {project.title} @@ -139,10 +139,10 @@ const ProjectsSection = () => { key={tech} className={`px-3 py-1.5 rounded-xl text-sm font-medium transition-all duration-300 ${ index % 3 === 0 - ? 'bg-cyan-500/10 text-cyan-300 border border-cyan-500/20' + ? 'bg-primary/10 text-white border border-primary/20' : index % 3 === 1 - ? 'bg-purple-500/10 text-purple-300 border border-purple-500/20' - : 'bg-emerald-500/10 text-emerald-300 border border-emerald-500/20' + ? 'bg-gray-700/10 text-white border border-gray-700/20' + : 'bg-gray-700/10 text-white border border-gray-700/20' }`} style={{ animationDelay: `${techIndex * 0.1}s`, @@ -157,10 +157,10 @@ const ProjectsSection = () => {