style: optimize global CSS, scrollbars, and text shadow

This commit is contained in:
Chneemann 2026-07-23 08:17:10 +02:00
parent 4f7a39628f
commit 1dd92307d6
8 changed files with 83 additions and 53 deletions

View file

@ -1,26 +1,52 @@
@import "tailwindcss";
:root {
--background: #ffffff;
--foreground: #171717;
@theme {
--font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif;
--font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, monospace;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
@layer base {
html {
color-scheme: dark;
scroll-behavior: smooth;
height: 100%;
scrollbar-color: #1e293b #020617;
scrollbar-width: thin;
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
body {
@apply bg-slate-950 text-slate-200 font-sans text-base antialiased min-h-full flex flex-col relative overflow-x-hidden;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8);
}
::selection {
@apply bg-blue-500/30 text-blue-200;
}
:focus-visible {
@apply outline-2 outline-offset-2 outline-blue-500 rounded-sm;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #020617;
}
::-webkit-scrollbar-thumb {
background: #1e293b;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #334155;
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: Arial, Helvetica, sans-serif;
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill {
-webkit-text-fill-color: #e2e8f0;
-webkit-box-shadow: 0 0 0px 1000px #020617 inset;
transition: background-color 5000s ease-in-out 0s;
}

View file

@ -9,11 +9,14 @@ const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
display: "swap",
preload: false,
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
display: "swap",
preload: false,
});
export const metadata: Metadata = {
@ -27,11 +30,8 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
<html
lang="en"
className={`${geistSans.variable} ${geistMono.variable} h-full bg-slate-950 antialiased`}
>
<body className="min-h-full flex flex-col relative">
<html lang="en" className={`${geistSans.variable} ${geistMono.variable}`}>
<body>
<Background />
<Header />
<main className="grow">{children}</main>

View file

@ -2,7 +2,7 @@ export default function About() {
return (
<section
id="aboutme"
className="relative py-6 px-4 md:px-6 max-w-5xl mx-auto border-t border-slate-900/50 scroll-mt-15"
className="relative py-6 px-4 md:px-6 max-w-5xl mx-auto scroll-mt-15"
>
{/* Titel */}
<div className="mb-6 space-y-1">
@ -16,7 +16,7 @@ export default function About() {
<div className="grid grid-cols-1 md:grid-cols-12 gap-12 items-start">
{/* Left column */}
<div className="md:col-span-7 space-y-6 text-slate-200 leading-relaxed text-base">
<div className="md:col-span-7 space-y-6 leading-relaxed">
<p>
Hey there! André herea full-stack developer based in Karlsruhe. A
childhood fascination with computers sparked this journey, which has
@ -55,11 +55,13 @@ export default function About() {
{/* Right column */}
<div className="md:col-span-5">
<div
className="group relative p-6 rounded-2xl border border-slate-800/80 bg-slate-900/40 backdrop-blur-sm
hover:border-blue-500/30 hover:bg-slate-900/80 hover:shadow-xl hover:shadow-blue-500/5
transition-all duration-300 flex flex-col justify-between overflow-hidden space-y-6"
className="group relative p-5 rounded-2xl border border-slate-700/60 bg-slate-900/90 backdrop-blur-md
shadow-lg shadow-black/40 border-t-slate-600/50
hover:border-blue-500/50 hover:bg-slate-800/90
hover:shadow-2xl hover:shadow-blue-500/10 hover:-translate-y-0.5
transition-all duration-300 ease-out flex flex-col justify-between overflow-hidden space-y-6"
>
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl group-hover:bg-blue-500/20 transition-all duration-500 pointer-events-none" />
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/15 rounded-full blur-xl group-hover:bg-blue-500/25 transition-all duration-500 pointer-events-none" />
<div>
{/* Header Titel */}
@ -75,7 +77,7 @@ export default function About() {
<li className="flex items-center gap-3">
<span className="text-blue-500 font-mono"></span>
<span className="text-slate-400 font-medium">Languages:</span>
<span className="text-slate-200 ml-auto text-right font-mono text-xs">
<span className="ml-auto text-right font-mono text-xs">
German, English
</span>
</li>
@ -84,7 +86,7 @@ export default function About() {
<span className="text-slate-400 font-medium">
Core Stack:
</span>
<span className="text-slate-200 ml-auto text-right font-mono text-xs">
<span className="ml-auto text-right font-mono text-xs">
Angular&nbsp;(TS), React&nbsp;(Next.js)
</span>
</li>
@ -93,7 +95,7 @@ export default function About() {
<span className="text-slate-400 font-medium">
Core Focus:
</span>
<span className="text-slate-200 ml-auto text-right font-mono text-xs">
<span className="ml-auto text-right font-mono text-xs">
Clean&nbsp;Code & Architecture
</span>
</li>

View file

@ -2,7 +2,7 @@ export default function Background() {
return (
<>
<div
className="fixed inset-0 pointer-events-none z-0 opacity-[0.15]"
className="fixed inset-0 pointer-events-none z-0 opacity-[0.25]"
style={{
backgroundImage: `linear-gradient(to right, #3b82f6 1px, transparent 1px), linear-gradient(to bottom, #3b82f6 1px, transparent 1px)`,
backgroundSize: "3rem 3rem",
@ -13,7 +13,7 @@ export default function Background() {
}}
/>
<div className="fixed top-0 left-1/2 -translate-x-1/2 w-[1000px] h-[400px] bg-linear-to-tr from-blue-600/10 to-cyan-400/10 blur-[120px] pointer-events-none z-0" />
<div className="fixed top-0 left-1/2 -translate-x-1/2 w-1000px h-400px bg-linear-to-tr from-blue-600/10 to-cyan-400/10 blur-[120px] pointer-events-none z-0" />
</>
);
}

View file

@ -2,7 +2,7 @@ import Link from "next/link";
export default function Footer() {
return (
<footer className="w-full border-t border-slate-900 bg-slate-950 text-center text-xs text-slate-500 px-4 sm:px-4 py-4">
<footer className="w-full bg-slate-950/50 text-center text-xs text-slate-500 px-4 sm:px-4 py-4">
<div className="max-w-5xl mx-auto flex flex-col md:flex-row justify-between items-center gap-4">
<p>© {new Date().getFullYear()} André Kempf. All rights reserved.</p>
<div className="flex gap-4">

View file

@ -14,7 +14,7 @@ export default function Header() {
];
return (
<header className="fixed top-0 left-0 w-full bg-slate-900/90 backdrop-blur-md border-b border-slate-800 z-50 px-4 sm:px-4 py-4">
<header className="fixed top-0 left-0 w-full bg-slate-950/50 backdrop-blur-md z-50 px-4 sm:px-4 py-4">
<div className="max-w-5xl mx-auto flex justify-between items-center">
<Link
href="/"
@ -25,7 +25,7 @@ export default function Header() {
</Link>
{/* Desktop navigation */}
<nav className="hidden md:flex gap-8 text-base font-medium text-slate-200">
<nav className="hidden md:flex gap-8 font-medium text-white">
{navLinks.map((link) => (
<Link
key={link.href}
@ -45,17 +45,17 @@ export default function Header() {
>
{/* Animated burger icon lines */}
<span
className={`block w-6 h-0.5 bg-slate-200 transition-all duration-300 group-hover:bg-blue-400 ${
className={`block w-6 h-0.5 bg-slate-100 transition-all duration-300 group-hover:bg-blue-400 ${
isOpen ? "rotate-45 translate-y-2" : ""
}`}
/>
<span
className={`block w-6 h-0.5 bg-slate-200 transition-all duration-300 group-hover:bg-blue-400 ${
className={`block w-6 h-0.5 bg-slate-100 transition-all duration-300 group-hover:bg-blue-400 ${
isOpen ? "opacity-0" : ""
}`}
/>
<span
className={`block w-6 h-0.5 bg-slate-200 transition-all duration-300 group-hover:bg-blue-400 ${
className={`block w-6 h-0.5 bg-slate-100 transition-all duration-300 group-hover:bg-blue-400 ${
isOpen ? "-rotate-45 -translate-y-2" : ""
}`}
/>
@ -63,7 +63,7 @@ export default function Header() {
{/* Mobile fullscreen overlay */}
<div
className={`fixed inset-0 w-full h-screen bg-slate-950/98 flex flex-col items-center justify-center gap-8 text-2xl font-semibold text-slate-200 transition-all duration-300 md:hidden ${
className={`fixed inset-0 w-full h-screen bg-slate-950/98 flex flex-col items-center justify-center gap-8 text-2xl font-semibold transition-all duration-300 md:hidden ${
isOpen
? "opacity-100 pointer-events-auto"
: "opacity-0 pointer-events-none"
@ -74,7 +74,7 @@ export default function Header() {
key={link.href}
href={link.href}
onClick={() => setIsOpen(false)}
className="hover:text-blue-400 transition-colors"
className="hover:text-blue-400 text-white transition-colors"
>
{link.label}
</Link>

View file

@ -2,10 +2,10 @@ import Link from "next/link";
export default function Hero() {
return (
<section className="relative pt-20 py-6 px-4 md:px-6 md:pt-24 max-w-5xl mx-auto border-t border-slate-900/50">
<div className="grid grid-cols-1 md:grid-cols-12 gap-12 items-center z-10 w-full">
<section className="relative pt-20 py-6 px-4 md:px-6 md:pt-24 max-w-5xl mx-auto">
<div className="grid grid-cols-1 md:grid-cols-12 gap-3 items-center z-10 w-full">
{/* Left column */}
<div className="md:col-span-7 lg:space-y-5 md:space-y-4 space-y-3 text-left">
<div className="md:col-span-8 lg:space-y-5 md:space-y-4 space-y-3 text-left">
<span className="text-blue-500 font-mono text-sm tracking-wider uppercase">
// Hi, my name is
</span>
@ -19,7 +19,7 @@ export default function Hero() {
<span className="text-blue-400/80 font-medium">Developer</span>
</h2>
<p className="text-base sm:text-lg text-slate-200 leading-relaxed max-w-xl">
<p className="text-lg leading-relaxed max-w-xl">
I conceptualize and develop modern web applications. With a sharp
eye for detail and a focus on clean code, I bring digital ideas to
life.
@ -41,7 +41,7 @@ export default function Hero() {
</Link>
<Link
href="https://andre-kempf.com/assets/downloads/Andre_Kempf_Lebenslauf_2025.pdf"
className="px-6 py-3 bg-slate-900 border border-slate-800 hover:border-slate-700 hover:bg-slate-850 text-slate-200 font-semibold rounded-lg transition-all hover:-translate-y-0.5 duration-200"
className="px-6 py-3 bg-slate-900 border border-slate-800 hover:border-slate-700 hover:bg-slate-850 font-semibold rounded-lg transition-all hover:-translate-y-0.5 duration-200"
>
Download CV
</Link>
@ -49,7 +49,7 @@ export default function Hero() {
</div>
{/* Right column */}
<div className="md:col-span-5 flex justify-center">
<div className="md:col-span-4 flex justify-center">
<div className="relative group h-auto w-64 aspect-5/6">
<div className="relative w-full h-full rounded-2xl border-5 border-slate-800 bg-slate-900 overflow-hidden flex items-center justify-center group-hover:border-blue-500/50 transition-colors duration-300">
<img

View file

@ -38,7 +38,7 @@ export default function Skills() {
return (
<section
id="myskills"
className="relative py-6 px-4 md:px-6 max-w-5xl mx-auto border-t border-slate-900/50 scroll-mt-15"
className="relative py-6 px-4 md:px-6 max-w-5xl mx-auto scroll-mt-15"
>
{/* Titel */}
<div className="mb-6 space-y-1 text-right flex flex-col items-end">
@ -51,7 +51,7 @@ export default function Skills() {
</div>
{/* Description */}
<div className="mb-4 text-slate-200 text-base leading-relaxed">
<div className="mb-4 leading-relaxed">
<p>
Through hands-on experience in various projects, I continuously expand
and refine my full-stack development skills. Here is an overview of
@ -70,11 +70,13 @@ export default function Skills() {
{skillCategories.map((category) => (
<div
key={category.title}
className="group relative p-4 rounded-2xl border border-slate-800/80 bg-slate-900/40 backdrop-blur-sm
hover:border-blue-500/30 hover:bg-slate-900/80 hover:shadow-xl hover:shadow-blue-500/5
transition-all duration-300 flex flex-col justify-between overflow-hidden"
className="group relative p-5 rounded-2xl border border-slate-700/60 bg-slate-900/90 backdrop-blur-md
shadow-lg shadow-black/40 border-t-slate-600/50
hover:border-blue-500/50 hover:bg-slate-800/90
hover:shadow-2xl hover:shadow-blue-500/10 hover:-translate-y-0.5
transition-all duration-300 ease-out flex flex-col justify-between overflow-hidden"
>
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl group-hover:bg-blue-500/20 transition-all duration-500 pointer-events-none" />
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/15 rounded-full blur-xl group-hover:bg-blue-500/25 transition-all duration-500 pointer-events-none" />
<div>
{/* Header */}