"use client" import { useMemo } from "react" import { useTheme } from "next-themes" import type { COBEOptions } from "cobe" import { Globe } from "@/components/ui/globe" import { Particles } from "@/components/ui/particles" import { Meteors } from "@/components/ui/meteors" import { AnimatedGradientText } from "@/components/ui/animated-gradient-text" import { TextAnimate } from "@/components/ui/text-animate" export function Hero() { const { resolvedTheme } = useTheme() const isDark = resolvedTheme === "dark" const globeConfig = useMemo((): Omit => { const baseConfig: Omit = { phi: 0, theta: 0.3, dark: isDark ? 1 : 0, diffuse: 0.4, mapSamples: 12000, mapBrightness: 1.2, devicePixelRatio: 2, baseColor: isDark ? [0.3, 0.3, 0.3] as [number, number, number] : [1, 1, 1] as [number, number, number], markerColor: [251 / 255, 100 / 255, 21 / 255] as [number, number, number], glowColor: isDark ? [0.5, 0.5, 0.5] as [number, number, number] : [1, 1, 1] as [number, number, number], markers: [ { location: [39.9042, 116.4074], size: 0.08 }, { location: [40.7128, -74.006], size: 0.1 }, { location: [51.5074, -0.1278], size: 0.07 }, { location: [35.6762, 139.6503], size: 0.06 }, ], } return baseConfig }, [isDark]) return (
{/* Background effects */}
{/* Content */}
你好,世界 👋

Evan Sun

全栈工程师 / AI 工程师
{/* Fade gradient at bottom */}
) }