Initial commit: Portfolio Website

Vollständige Next.js 15 Portfolio-Website mit:
- Blog-System mit 100+ Artikeln
- Supabase-Integration
- Responsive Design mit Tailwind CSS
- TypeScript-Konfiguration
- Testing-Setup mit Vitest und Playwright

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-01 15:07:20 +01:00
co-authored by Claude Opus 4.5
commit e1bbe5455d
315 changed files with 94124 additions and 0 deletions
+164
View File
@@ -0,0 +1,164 @@
@import './colors.css';
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Font loading states */
html.fonts-loading body {
opacity: 0;
transition: opacity 0.2s ease-in-out;
}
html.fonts-loaded body,
html.fonts-fallback body {
opacity: 1;
}
@layer base {
:root {
font-family: Inter, system-ui, sans-serif;
}
html {
background-color: transparent !important;
}
body {
@apply text-foreground antialiased;
background-color: transparent !important;
}
#root {
background-color: transparent !important;
}
h1, h2, h3, h4, h5, h6 {
@apply font-sans font-bold tracking-tight;
}
}
@layer components {
.container {
@apply px-4 mx-auto max-w-7xl sm:px-6 lg:px-8;
}
.transition-standard {
@apply transition-all duration-300 ease-in-out;
}
.animate-float {
animation: float 6s ease-in-out infinite;
}
.animate-pulse-slow {
animation: pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
}
@layer utilities {
.text-gradient {
@apply bg-clip-text text-transparent bg-gradient-to-r from-primary via-accent to-secondary;
}
/* GPU acceleration utilities - simplified */
.gpu-accelerated {
transform: translateZ(0);
-webkit-transform: translateZ(0);
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
}
@keyframes float {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-20px);
}
}
@keyframes pulse {
0%, 100% {
opacity: 0.1;
}
50% {
opacity: 0.3;
}
}
@keyframes slide-right {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
@keyframes slide-down {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(100%);
}
}
.animate-slide-right {
animation: slide-right 8s linear infinite;
}
.animate-slide-down {
animation: slide-down 8s linear infinite;
}
/* Prevent hover flickering */
* {
-webkit-tap-highlight-color: transparent;
}
a, button {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
transform: translateZ(0);
}
/* Scrollbar Styling */
@media (pointer: fine) {
::-webkit-scrollbar {
@apply w-2;
}
::-webkit-scrollbar-track {
@apply bg-muted;
}
::-webkit-scrollbar-thumb {
@apply bg-accent rounded-full hover:bg-accent-foreground transition-colors;
}
}
/* Improved Mobile Experience */
@media (max-width: 640px) {
h1 {
@apply text-3xl;
}
h2 {
@apply text-2xl;
}
.prose {
@apply text-base space-y-6;
}
.prose p {
@apply leading-relaxed;
}
button,
a {
@apply min-h-[44px] min-w-[44px];
}
}