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; --background: #050B14;
--foreground: #E2E8F0; --foreground: #E2E8F0;
--zsl-bg: #050B14; --zsl-bg: #0A192F;
--zsl-text: #E2E8F0; --zsl-text: #E2E8F0;
--zsl-primary: #00D4FF; --zsl-primary: #00D4FF;
--zsl-accent: #FFAA00; --zsl-accent: #FFAA00;
--zsl-card: #0F172A; --zsl-card: #112240;
--zsl-muted: #94A3B8; --zsl-muted: #8892b0;
} }
@theme inline { @theme inline {
--color-background: var(--background); --color-background: var(--background);
--color-foreground: var(--foreground); --color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans); --font-sans: var(--font-inter);
--font-mono: var(--font-geist-mono); --font-mono: var(--font-rajdhani);
--color-zsl-bg: var(--zsl-bg); --color-zsl-bg: var(--zsl-bg);
--color-zsl-text: var(--zsl-text); --color-zsl-text: var(--zsl-text);
@@ -29,9 +29,11 @@
--color-zsl-card: var(--zsl-card); --color-zsl-card: var(--zsl-card);
--color-zsl-muted: var(--zsl-muted); --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-pulse-slow: pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite;
--animate-grid-move: grid-move 20s linear 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 { @keyframes scroll {
0% { transform: translateX(0); } 0% { transform: translateX(0); }
@@ -40,7 +42,17 @@
@keyframes grid-move { @keyframes grid-move {
0% { background-position: 0 0; } 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)); rgb(var(--background-start-rgb));
overflow-x: hidden; overflow-x: hidden;
font-family: Arial, Helvetica, sans-serif; font-family: var(--font-sans);
} }
/* Custom Scrollbar */ /* Custom Scrollbar */

View File

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

View File

@@ -15,7 +15,6 @@ import { PartnerLogos } from '@/components/PartnerLogos';
import { ScrollAnimation } from '@/components/ScrollAnimation'; import { ScrollAnimation } from '@/components/ScrollAnimation';
import { CookieBanner } from '@/components/CookieBanner'; import { CookieBanner } from '@/components/CookieBanner';
import { ProjectModal } from '@/components/ProjectModal'; import { ProjectModal } from '@/components/ProjectModal';
import { LanguageSwitcher } from '@/components/LanguageSwitcher';
import { NavPage } from '@/types'; import { NavPage } from '@/types';
// Social Links // Social Links
@@ -200,38 +199,6 @@ export default function Home() {
color: "accent", color: "accent",
desc: "Karmaşık sistem ağlarını ve sunucu yapılarını yöneten mimar.", desc: "Karmaşık sistem ağlarını ve sunucu yapılarını yöneten mimar.",
stats: { network: 98, devops: 94, latency: 1 } 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,27 +864,25 @@ export default function Home() {
))} ))}
</div> </div>
{/* Language Switcher */}
<div className="hidden md:block">
<LanguageSwitcher />
</div>
{/* Mobile Menu Button */} {/* Mobile Menu Button */}
<div className="md:hidden z-50"> <div className="md:hidden flex items-center">
<button onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)} className="text-white p-2"> <button
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
className="text-white p-2"
>
{isMobileMenuOpen ? ( {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-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-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> <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> </button>
</div> </div>
</div> </div>
</div> </div>
{/* Mobile Menu Overlay */} {/* Mobile Menu */}
{isMobileMenuOpen && ( {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.HOME, label: 'ANA SAYFA' },
{ page: NavPage.SERVICES, label: 'ÇÖZÜMLER' }, { page: NavPage.SERVICES, label: 'ÇÖZÜMLER' },
@@ -929,11 +894,14 @@ export default function Home() {
].map((item) => ( ].map((item) => (
<button <button
key={item.page} key={item.page}
onClick={() => handleNavClick(item.page)} onClick={() => {
className={`text-xl font-mono font-bold tracking-widest ${ 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 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 bg-white/10'
: 'text-white hover:text-zsl-primary' : 'text-slate-400 hover:text-white hover:bg-white/5'
}`} }`}
> >
{item.label} {item.label}

View File

@@ -139,4 +139,8 @@ export const tr = {
}, },
} as const; } 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>;