This commit is contained in:
Şahan Hasret
2025-12-14 01:06:11 +03:00
parent af9e3d8c53
commit 7c4828ca84
4 changed files with 57 additions and 73 deletions

View File

@@ -8,19 +8,19 @@
--background: #050B14;
--foreground: #E2E8F0;
--zsl-bg: #050B14;
--zsl-bg: #0A192F;
--zsl-text: #E2E8F0;
--zsl-primary: #00D4FF;
--zsl-accent: #FFAA00;
--zsl-card: #0F172A;
--zsl-muted: #94A3B8;
--zsl-card: #112240;
--zsl-muted: #8892b0;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
--font-sans: var(--font-inter);
--font-mono: var(--font-rajdhani);
--color-zsl-bg: var(--zsl-bg);
--color-zsl-text: var(--zsl-text);
@@ -29,9 +29,11 @@
--color-zsl-card: var(--zsl-card);
--color-zsl-muted: var(--zsl-muted);
--animate-scroll: scroll 40s linear infinite;
--animate-scroll: scroll 60s linear infinite;
--animate-pulse-slow: pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite;
--animate-grid-move: grid-move 20s linear infinite;
--animate-glow: glow 2s ease-in-out infinite alternate;
--animate-float: float 6s ease-in-out infinite;
@keyframes scroll {
0% { transform: translateX(0); }
@@ -40,7 +42,17 @@
@keyframes grid-move {
0% { background-position: 0 0; }
100% { background-position: 50px 50px; }
100% { background-position: 40px 40px; }
}
@keyframes glow {
0% { box-shadow: 0 0 5px #00D4FF; }
100% { box-shadow: 0 0 20px #00D4FF, 0 0 10px #00D4FF; }
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-20px); }
}
}
@@ -53,7 +65,7 @@ body {
)
rgb(var(--background-start-rgb));
overflow-x: hidden;
font-family: Arial, Helvetica, sans-serif;
font-family: var(--font-sans);
}
/* Custom Scrollbar */

View File

@@ -1,12 +1,12 @@
import type { Metadata, Viewport } from "next";
import { Inter, Orbitron } from "next/font/google";
import { Inter, Rajdhani } from "next/font/google";
import { Analytics } from '@vercel/analytics/next';
import { LocaleProvider } from '@/context/LocaleContext';
import React from 'react';
import "./globals.css";
const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
const orbitron = Orbitron({ subsets: ["latin"], variable: "--font-orbitron" });
const inter = Inter({ subsets: ["latin", "latin-ext"], variable: "--font-inter" });
const rajdhani = Rajdhani({ subsets: ["latin", "latin-ext"], variable: "--font-rajdhani", weight: ["300", "400", "500", "600", "700"] });
export const viewport: Viewport = {
width: 'device-width',
@@ -92,7 +92,7 @@ export default function RootLayout({
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
</head>
<body className={`${inter.variable} ${orbitron.variable} font-sans bg-zsl-bg text-zsl-text`}>
<body className={`${inter.variable} ${rajdhani.variable} font-sans bg-zsl-bg text-zsl-text`} suppressHydrationWarning>
<LocaleProvider>
<a href="#main-content" className="skip-link">
Ana i\u00e7eri\u011fe atla

View File

@@ -15,7 +15,6 @@ import { PartnerLogos } from '@/components/PartnerLogos';
import { ScrollAnimation } from '@/components/ScrollAnimation';
import { CookieBanner } from '@/components/CookieBanner';
import { ProjectModal } from '@/components/ProjectModal';
import { LanguageSwitcher } from '@/components/LanguageSwitcher';
import { NavPage } from '@/types';
// Social Links
@@ -200,38 +199,6 @@ export default function Home() {
color: "accent",
desc: "Karmaşık sistem ağlarını ve sunucu yapılarını yöneten mimar.",
stats: { network: 98, devops: 94, latency: 1 }
},
{
name: "Fatma Şahiner",
handle: "ALGORITHM",
role: "Software Developer",
color: "primary",
desc: "Temiz kod prensipleriyle çalışan güçlü algoritma geliştiricisi.",
stats: { java: 90, backend: 95, bugs: 0 }
},
{
name: "Bedirhan Demirhan",
handle: "FRONT_LINE",
role: "Web Developer",
color: "accent",
desc: "Modern web teknolojileriyle dinamik arayüzleri inşa eden uzman.",
stats: { react: 95, css: 100, speed: 90 }
},
{
name: "Murat Dursun",
handle: "PIXEL_FLOW",
role: "Web Developer",
color: "primary",
desc: "Kullanıcı deneyimini kusursuz koda döken web geliştirici.",
stats: { ux: 95, code: 92, coffee: 80 }
},
{
name: "Mustafa Çoban",
handle: "NET_DEFENDER",
role: "Cyber Security Expert",
color: "accent",
desc: "Ağ güvenliği ve sızma testlerinde uzmanlaşmış siber güvenlik kalkanı.",
stats: { defense: 99, pentest: 98, firewall: 100 }
}
];
@@ -897,28 +864,26 @@ export default function Home() {
))}
</div>
{/* Language Switcher */}
<div className="hidden md:block">
<LanguageSwitcher />
</div>
{/* Mobile Menu Button */}
<div className="md:hidden z-50">
<button onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)} className="text-white p-2">
{isMobileMenuOpen ? (
<svg className="w-8 h-8 text-zsl-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" /></svg>
) : (
<svg className="w-8 h-8" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6h16M4 12h16M4 18h16" /></svg>
)}
</button>
<div className="md:hidden flex items-center">
<button
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
className="text-white p-2"
>
{isMobileMenuOpen ? (
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" /></svg>
) : (
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6h16M4 12h16M4 18h16" /></svg>
)}
</button>
</div>
</div>
</div>
{/* Mobile Menu Overlay */}
{/* Mobile Menu */}
{isMobileMenuOpen && (
<div className="md:hidden fixed inset-0 bg-zsl-bg/95 backdrop-blur-xl z-40 flex flex-col items-center justify-center space-y-8 animate-in slide-in-from-top-10">
{[
<div className="md:hidden bg-zsl-bg/95 backdrop-blur-xl border-b border-white/10 absolute w-full left-0 top-24 py-4 px-4 flex flex-col space-y-2">
{[
{ page: NavPage.HOME, label: 'ANA SAYFA' },
{ page: NavPage.SERVICES, label: 'ÇÖZÜMLER' },
{ page: NavPage.PROJECTS, label: 'LAB SONUÇLARI' },
@@ -926,20 +891,23 @@ export default function Home() {
{ page: NavPage.ABOUT, label: 'HİKAYE' },
{ page: NavPage.LAB, label: 'AI LAB' },
{ page: NavPage.CONTACT, label: 'BAĞLANTI' }
].map((item) => (
<button
].map((item) => (
<button
key={item.page}
onClick={() => handleNavClick(item.page)}
className={`text-xl font-mono font-bold tracking-widest ${
currentPage === item.page
? 'text-zsl-primary border border-zsl-primary px-6 py-2 rounded shadow-[0_0_15px_rgba(0,212,255,0.3)]'
: 'text-white hover:text-zsl-primary'
onClick={() => {
handleNavClick(item.page);
setIsMobileMenuOpen(false);
}}
className={`w-full text-left px-4 py-3 rounded-lg text-sm font-mono font-bold tracking-widest transition-all ${
currentPage === item.page
? 'text-white bg-white/10'
: 'text-slate-400 hover:text-white hover:bg-white/5'
}`}
>
>
{item.label}
</button>
))}
</div>
</button>
))}
</div>
)}
</nav>

View File

@@ -139,4 +139,8 @@ export const tr = {
},
} as const;
export type TranslationKeys = typeof tr;
type RecursiveString<T> = {
[K in keyof T]: T[K] extends object ? RecursiveString<T[K]> : string;
};
export type TranslationKeys = RecursiveString<typeof tr>;