Refactor FootBar and global styles for improved layout and visual consistency; simplify social link structure and update styling in Navbar and Section components for a cleaner interface.
This commit is contained in:
parent
0beb20635f
commit
81b57128b5
8 changed files with 23 additions and 121 deletions
|
|
@ -11,7 +11,7 @@ export default function Button({
|
|||
variant = 'primary',
|
||||
size = 'md',
|
||||
}: ButtonProps) {
|
||||
const baseClasses = "cursor-pointer font-medium rounded-lg transition-all duration-300 ease-out focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-900 disabled:opacity-50 disabled:cursor-not-allowed";
|
||||
const baseClasses = "cursor-pointer font-medium rounded-lg transition-all duration-300 ease-out disabled:opacity-50 disabled:cursor-not-allowed";
|
||||
|
||||
const sizeClasses = {
|
||||
sm: "px-3 py-1.5 text-sm",
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ export default function Card({
|
|||
const baseClasses = "relative overflow-hidden rounded-xl transition-all duration-300 ease-out";
|
||||
|
||||
const variantClasses = {
|
||||
default: "bg-gray-900/50 border border-gray-800/50 backdrop-blur-sm",
|
||||
glass: "bg-white/5 border border-white/10 backdrop-blur-md",
|
||||
outlined: "bg-transparent border-2 border-gray-700/50"
|
||||
default: "bg-gradient-to-br bg-gradient-to-br from-stone-800 via-stone-900 to-stone-800 border border-stone-700",
|
||||
glass: "bg-gradient-to-br bg-gradient-to-br from-white/5 via-white/10 to-white/5 border border-white/10 backdrop-blur-md",
|
||||
outlined: "bg-transparent border-2 border-stone-700/50"
|
||||
};
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ interface SectionProps {
|
|||
title?: string;
|
||||
subtitle?: string;
|
||||
className?: string;
|
||||
variant?: 'default' | 'hero' | 'feature' | 'minimal';
|
||||
variant?: 'default' | 'hero' | 'minimal';
|
||||
}
|
||||
|
||||
export default function Section({
|
||||
|
|
@ -18,9 +18,8 @@ export default function Section({
|
|||
const baseClasses = "relative py-16 lg:py-24";
|
||||
|
||||
const variantClasses = {
|
||||
default: "bg-gray-900/30",
|
||||
hero: "bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900",
|
||||
feature: "bg-gray-800/20",
|
||||
default: "bg-stone-900",
|
||||
hero: "bg-gradient-to-br from-stone-950 via-stone-900 to-stone-950",
|
||||
minimal: "bg-transparent"
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,17 @@
|
|||
"use client";
|
||||
|
||||
import Link from "next/link";
|
||||
import { Button, Badge } from "./components";
|
||||
|
||||
export default function FootBar() {
|
||||
const currentYear = new Date().getFullYear();
|
||||
|
||||
const socialLinks = [
|
||||
{ name: "GitHub", href: "https://github.com/GoranSalzmann", icon: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" },
|
||||
{ name: "Email", href: "mailto:karl.mike2002@gmail.com", icon: "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-.904.732-1.636 1.636-1.636h3.819l6.545 4.91 6.545-4.91h3.819c.904 0 1.636.732 1.636 1.636z" }
|
||||
{
|
||||
name: "GitHub", href: "https://github.com/GoranSalzmann"
|
||||
},
|
||||
{
|
||||
name: "Email", href: "mailto:karl.mike2002@gmail.com"
|
||||
}
|
||||
];
|
||||
|
||||
const quickLinks = [
|
||||
|
|
@ -18,8 +21,7 @@ export default function FootBar() {
|
|||
];
|
||||
|
||||
return (
|
||||
<footer className="relative bg-gradient-to-br from-gray-900 via-gray-800 to-gray-900 border-t border-gray-800/50">
|
||||
<div className="relative container mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
||||
<footer className="bg-stone-900 p-6">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
|
||||
{/* Brand Section */}
|
||||
<div className="lg:col-span-2">
|
||||
|
|
@ -70,9 +72,7 @@ export default function FootBar() {
|
|||
className="flex items-center gap-3 text-gray-300 hover:text-white transition-all duration-300 hover:translate-x-1 group"
|
||||
>
|
||||
<div className="w-8 h-8 bg-gray-800/50 rounded-lg flex items-center justify-center group-hover:bg-blue-500/20 transition-colors duration-300">
|
||||
<svg className="w-4 h-4" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d={social.icon} />
|
||||
</svg>
|
||||
{ /* Icon */ }
|
||||
</div>
|
||||
<span>{social.name}</span>
|
||||
</a>
|
||||
|
|
@ -82,24 +82,10 @@ export default function FootBar() {
|
|||
</div>
|
||||
|
||||
{/* Bottom Section */}
|
||||
<div className="mt-12 pt-8 border-t border-gray-800/50">
|
||||
<div className="flex flex-col md:flex-row justify-between items-center gap-4">
|
||||
<div className="text-gray-400 text-sm">
|
||||
<p>© {currentYear} Mike Karl. All rights reserved.</p>
|
||||
<p className="mt-1">Built with Next.js and Tailwind CSS</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-4">
|
||||
<Button
|
||||
variant="glass"
|
||||
size="sm"
|
||||
onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })}
|
||||
>
|
||||
zum Seitenanfang
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-6 pt-4 border-t text-sm text-gray-500 flex justify-between">
|
||||
<p>© {currentYear} Mike Karl. All rights reserved.</p>
|
||||
<p>Built with Next.js and Tailwind CSS</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,22 +1,5 @@
|
|||
@import "tailwindcss";
|
||||
|
||||
:root {
|
||||
--background: #0a0a0a;
|
||||
--foreground: #e0e0e0;
|
||||
--surface: #111111;
|
||||
--surface-elevated: #1a1a1a;
|
||||
--border: #333333;
|
||||
--accent: #3b82f6;
|
||||
--accent-hover: #2563eb;
|
||||
}
|
||||
|
||||
@theme inline {
|
||||
--color-background: var(--background);
|
||||
--color-foreground: var(--foreground);
|
||||
--font-sans: var(--font-geist-sans);
|
||||
--font-mono: var(--font-geist-mono);
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
|
@ -26,60 +9,5 @@ html {
|
|||
}
|
||||
|
||||
body {
|
||||
background: var(--background) linear-gradient(135deg, #0a0a0a 0%, #111111 50%, #0a0a0a 100%);
|
||||
color: var(--foreground);
|
||||
font-family: var(--font-geist-sans), system-ui, -apple-system, sans-serif;
|
||||
line-height: 1.6;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
body::before {
|
||||
content: '';
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background:
|
||||
radial-gradient(circle at 20% 80%, rgba(59, 130, 246, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(147, 51, 234, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 40% 40%, rgba(236, 72, 153, 0.05) 0%, transparent 50%);
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
/* 3D Effects */
|
||||
.glass-effect {
|
||||
backdrop-filter: blur(16px);
|
||||
-webkit-backdrop-filter: blur(16px);
|
||||
}
|
||||
|
||||
.neon-glow {
|
||||
box-shadow:
|
||||
0 0 20px rgba(59, 130, 246, 0.3),
|
||||
0 0 40px rgba(59, 130, 246, 0.1);
|
||||
}
|
||||
|
||||
.text-glow {
|
||||
text-shadow: 0 0 10px rgba(59, 130, 246, 0.5);
|
||||
}
|
||||
|
||||
/* Animation utilities */
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0px); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
|
||||
@keyframes pulse-glow {
|
||||
0%, 100% { box-shadow: 0 0 20px rgba(59, 130, 246, 0.3); }
|
||||
50% { box-shadow: 0 0 30px rgba(59, 130, 246, 0.6); }
|
||||
}
|
||||
|
||||
.float {
|
||||
animation: float 6s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.pulse-glow {
|
||||
animation: pulse-glow 2s ease-in-out infinite;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,8 @@
|
|||
import type { Metadata } from "next";
|
||||
import { Geist, Geist_Mono } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import Navbar from "./navbar";
|
||||
import FootBar from "./footbar";
|
||||
|
||||
const geistSans = Geist({
|
||||
variable: "--font-geist-sans",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
const geistMono = Geist_Mono({
|
||||
variable: "--font-geist-mono",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Welcome - Mike Karl",
|
||||
description: "Personal website of Mike Karl",
|
||||
|
|
@ -27,7 +16,7 @@ export default function RootLayout({
|
|||
return (
|
||||
<html lang="en">
|
||||
<body
|
||||
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
||||
className={`bg-stone-950`}
|
||||
>
|
||||
<Navbar />
|
||||
{children}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ export default function Navbar() {
|
|||
];
|
||||
|
||||
return (
|
||||
<nav className="fixed top-0 left-0 right-0 z-50 bg-gray-900/80 backdrop-blur-md border-b border-gray-800/30 shadow-xl">
|
||||
<nav className="fixed top-0 left-0 right-0 z-50 backdrop-blur-md border-b border-gray-800/30 shadow-xl">
|
||||
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="flex items-center justify-between h-16">
|
||||
{/* Logo */}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { Section, Card, CardHeader, CardContent, CardFooter, Button, Badge } fro
|
|||
|
||||
export default function Home() {
|
||||
return (
|
||||
<main className="pt-16">
|
||||
<main>
|
||||
{/* Hero Section */}
|
||||
<Section variant="hero" title="Mike Karl" subtitle="Fullstack Web und Systementwickler">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
|
|
@ -82,7 +82,7 @@ export default function Home() {
|
|||
</Section>
|
||||
|
||||
{/* Skills Section */}
|
||||
<Section variant="feature" title="Erfahrung" subtitle="Technisches Wissen und Skills">
|
||||
<Section title="Erfahrung" subtitle="Technisches Wissen und Skills">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<Card variant="outlined">
|
||||
<CardHeader>
|
||||
|
|
@ -141,7 +141,7 @@ export default function Home() {
|
|||
</Section>
|
||||
|
||||
{/* Portfolio Section */}
|
||||
<Section variant="feature" title="Portfolio" subtitle="Einige meiner Projekte (allein und im Team)">
|
||||
<Section title="Portfolio" subtitle="Einige meiner Projekte (allein und im Team)">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<Card
|
||||
variant="glass"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue