diff --git a/app/favicon.ico b/app/favicon.ico new file mode 100644 index 0000000..718d6fe Binary files /dev/null and b/app/favicon.ico differ diff --git a/app/globals.css b/app/globals.css new file mode 100644 index 0000000..ec5f733 --- /dev/null +++ b/app/globals.css @@ -0,0 +1,44 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + /* Hiddify Colors */ + --primary: #2fbea5; + --primary-dark: #005048; + --primary-light: #7df8dd; + + --bg-app: #191f23; + --bg-card: #263238; + --bg-elevated: #37474f; + + --text-primary: #e1e2e6; + --text-white: #ffffff; + + --border: #37474f; + --outline: #4caf50; + + --success: #44a334; + --idle: #4a4d8b; + --error: #f44336; +} + +body { + background: var(--bg-app); + color: var(--text-primary); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; +} + +/* Бегущая строка */ +@keyframes marquee { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(-50%); + } +} + +.animate-marquee { + animation: marquee 20s linear infinite; +} diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..7d61831 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,52 @@ +import './globals.css'; +import type { Metadata } from 'next'; +import { Inter } from 'next/font/google'; + +const inter = Inter({ subsets: ['latin'] }); + +export const viewport = { + width: 'device-width', + initialScale: 1, + maximumScale: 1, + userScalable: false, // Отключаем зум для mini app + themeColor: '#191f23', // Цвет темы Umbrix +}; + +export const metadata: Metadata = { + title: 'Umbrix VPN', + description: 'Быстрый и безопасный VPN сервис', + openGraph: { + title: 'Umbrix VPN', + description: 'Быстрый и безопасный VPN сервис', + images: [ + { + url: 'https://bolt.new/static/og_default.png', + }, + ], + }, + twitter: { + card: 'summary_large_image', + title: 'Umbrix VPN', + description: 'Быстрый и безопасный VPN сервис', + images: [ + { + url: 'https://bolt.new/static/og_default.png', + }, + ], + }, +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + + {children} + + ); +}