Font Fix
This commit is contained in:
@@ -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 */
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,28 +864,26 @@ 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
|
||||||
{isMobileMenuOpen ? (
|
onClick={() => setIsMobileMenuOpen(!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>
|
className="text-white p-2"
|
||||||
) : (
|
>
|
||||||
<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>
|
{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>
|
||||||
</button>
|
) : (
|
||||||
|
<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>
|
</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' },
|
||||||
{ page: NavPage.PROJECTS, label: 'LAB SONUÇLARI' },
|
{ page: NavPage.PROJECTS, label: 'LAB SONUÇLARI' },
|
||||||
@@ -926,20 +891,23 @@ export default function Home() {
|
|||||||
{ page: NavPage.ABOUT, label: 'HİKAYE' },
|
{ page: NavPage.ABOUT, label: 'HİKAYE' },
|
||||||
{ page: NavPage.LAB, label: 'AI LAB' },
|
{ page: NavPage.LAB, label: 'AI LAB' },
|
||||||
{ page: NavPage.CONTACT, label: 'BAĞLANTI' }
|
{ page: NavPage.CONTACT, label: 'BAĞLANTI' }
|
||||||
].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);
|
||||||
currentPage === item.page
|
setIsMobileMenuOpen(false);
|
||||||
? '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'
|
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}
|
{item.label}
|
||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|||||||
@@ -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>;
|
||||||
|
|||||||
Reference in New Issue
Block a user