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>
164 lines
2.6 KiB
CSS
164 lines
2.6 KiB
CSS
@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];
|
|
}
|
|
} |