- Migrate to Tailwind CSS v4 with @theme, @layer, @plugin syntax - Upgrade to Next.js 16.1, React 19.2, TypeScript 5.9.3 - Add 8 technology landing pages (Next.js, React, TypeScript, Tailwind CSS, Claude AI, Python, n8n, KI-Agenten) - Expand SEO keywords across all locales (de/en/sr) for home, layout, cities, services - Add tech-specific keywords to all 22 city pages - Add FAQ schema + seoKeywords to service detail pages - Add CollectionPage JSON-LD to blog listing - Fix city page: dynamic region, BASE_URL canonicals, x-default hreflang - Rewrite terms page with full German AGB, English and Serbian translations - Remove dead crypto import and unused CSRF middleware (Edge Runtime fix) - Remove crawlDelay from robots.ts - Update sitemap with technology pages (~198 indexed URLs) - Remove deprecated tailwind.config.js Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
166 lines
2.6 KiB
CSS
166 lines
2.6 KiB
CSS
@import "tailwindcss";
|
|
@plugin "tailwindcss-animate";
|
|
@plugin "@tailwindcss/forms" {
|
|
strategy: class;
|
|
}
|
|
|
|
/* 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];
|
|
}
|
|
}
|