Compare commits
3 Commits
018f33a39e
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 0b55372fa5 | |||
| 097b25f8fa | |||
| bb60b6dda3 |
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>HiFast VPN</title>
|
<title>HiFast VPN</title>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "tsc -b && vite build",
|
"build": "vite build",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"check": "tsc -b --noEmit"
|
"check": "tsc -b --noEmit"
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
<svg width="429" height="360" viewBox="0 0 429 360" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M126.397 143.749H206.991L234.774 0H319.122L250.041 360H165.443L192.975 216.502H112.381L84.5986 360H0L59.3191 52.6829L33.0385 0H153.929L126.397 143.749Z" fill="currentColor" style="mix-blend-mode:plus-lighter"/>
|
|
||||||
<path d="M359.669 360H275.321L324.649 103.108H409.175L359.669 360Z" fill="currentColor" style="mix-blend-mode:plus-lighter"/>
|
|
||||||
<path d="M413.305 81.7003H328.758L344.401 0.250871H429L413.305 81.7003Z" fill="currentColor" style="mix-blend-mode:plus-lighter"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 604 B |
@@ -8,6 +8,22 @@ interface LayoutProps {
|
|||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const XIcon = ({ className }: { className?: string }) => (
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
strokeWidth="2"
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
className={className}
|
||||||
|
>
|
||||||
|
<path d="M4 4l11.733 16h4.267l-11.733 -16z" />
|
||||||
|
<path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
export default function Layout({ children }: LayoutProps) {
|
export default function Layout({ children }: LayoutProps) {
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const { language, setLanguage, t } = useLanguage();
|
const { language, setLanguage, t } = useLanguage();
|
||||||
@@ -103,6 +119,19 @@ export default function Layout({ children }: LayoutProps) {
|
|||||||
<p className="text-gray-300 mb-4">
|
<p className="text-gray-300 mb-4">
|
||||||
{t('footer.description')}
|
{t('footer.description')}
|
||||||
</p>
|
</p>
|
||||||
|
<div className="flex flex-col space-y-4 mb-8">
|
||||||
|
<div className="flex flex-wrap gap-4">
|
||||||
|
<a
|
||||||
|
href="https://x.com/HiFastVPN"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="flex items-center space-x-3 px-4 py-2 bg-white/5 hover:bg-white/10 border border-white/10 hover:border-blue-400/50 rounded-full transition-all group"
|
||||||
|
>
|
||||||
|
<XIcon className="h-4 w-4 text-white" />
|
||||||
|
<span className="text-gray-300 group-hover:text-white text-sm font-medium">Follow us on X</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div className="flex space-x-4">
|
<div className="flex space-x-4">
|
||||||
<div className="flex items-center space-x-2 text-gray-300">
|
<div className="flex items-center space-x-2 text-gray-300">
|
||||||
<Globe className="h-5 w-5" />
|
<Globe className="h-5 w-5" />
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ export default function About() {
|
|||||||
|
|
||||||
const stats = [
|
const stats = [
|
||||||
{ label: t('about.stats.experience'), value: "5+" },
|
{ label: t('about.stats.experience'), value: "5+" },
|
||||||
{ label: t('about.stats.users'), value: "10M+" },
|
{ label: t('about.stats.users'), value: "1M+" },
|
||||||
{ label: t('about.stats.servers'), value: "105+" },
|
{ label: t('about.stats.servers'), value: "105+" },
|
||||||
{ label: t('about.stats.countries'), value: "150+" }
|
{ label: t('about.stats.countries'), value: "150+" }
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ export default function Contact() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Quick Support */}
|
{/* Quick Support */}
|
||||||
<div className="bg-white/10 backdrop-blur-md rounded-xl p-8 border border-white/20">
|
{/* <div className="bg-white/10 backdrop-blur-md rounded-xl p-8 border border-white/20">
|
||||||
<h3 className="text-xl font-bold text-white mb-4">{t('contact.quick.title')}</h3>
|
<h3 className="text-xl font-bold text-white mb-4">{t('contact.quick.title')}</h3>
|
||||||
<p className="text-gray-300 mb-6">
|
<p className="text-gray-300 mb-6">
|
||||||
{t('contact.quick.text')}
|
{t('contact.quick.text')}
|
||||||
@@ -249,7 +249,7 @@ export default function Contact() {
|
|||||||
<span>{t('contact.quick.servers')}</span>
|
<span>{t('contact.quick.servers')}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>*/}
|
||||||
|
|
||||||
{/* Response Time */}
|
{/* Response Time */}
|
||||||
<div className="bg-white/10 backdrop-blur-md rounded-xl p-8 border border-white/20">
|
<div className="bg-white/10 backdrop-blur-md rounded-xl p-8 border border-white/20">
|
||||||
|
|||||||
+2
-2
@@ -133,7 +133,7 @@ export default function Home() {
|
|||||||
<h2 className="text-3xl md:text-4xl font-bold text-white mb-6">{t('home.cta.title')}</h2>
|
<h2 className="text-3xl md:text-4xl font-bold text-white mb-6">{t('home.cta.title')}</h2>
|
||||||
<p className="text-xl text-blue-100 mb-8">{t('home.cta.subtitle')}</p>
|
<p className="text-xl text-blue-100 mb-8">{t('home.cta.subtitle')}</p>
|
||||||
<div className="flex flex-col sm:flex-row gap-4 justify-center items-center">
|
<div className="flex flex-col sm:flex-row gap-4 justify-center items-center">
|
||||||
<motion.button whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }} className="bg-white text-blue-600 hover:bg-gray-100 px-8 py-4 rounded-lg font-semibold text-lg flex items-center space-x-2 transition-colors">
|
<motion.button whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }} onClick={scrollToPlatforms} className="bg-white text-blue-600 hover:bg-gray-100 px-8 py-4 rounded-lg font-semibold text-lg flex items-center space-x-2 transition-colors">
|
||||||
<Shield className="h-5 w-5" />
|
<Shield className="h-5 w-5" />
|
||||||
<span>{t('home.cta.button')}</span>
|
<span>{t('home.cta.button')}</span>
|
||||||
</motion.button>
|
</motion.button>
|
||||||
@@ -157,7 +157,7 @@ export default function Home() {
|
|||||||
<div className="max-w-7xl mx-auto">
|
<div className="max-w-7xl mx-auto">
|
||||||
<div className="grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
|
||||||
<div>
|
<div>
|
||||||
<div className="text-3xl font-bold text-blue-400 mb-2">10M+</div>
|
<div className="text-3xl font-bold text-blue-400 mb-2">1M+</div>
|
||||||
<div className="text-gray-300">{t('home.stats.users')}</div>
|
<div className="text-gray-300">{t('home.stats.users')}</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
Reference in New Issue
Block a user