Files
kidsai/src/app/globals.css
mindesbunister b31492a354 Complete Docker migration with Next.js 15 and cleaned design
- Migrated from Express.js to Next.js 15 with TypeScript
- Added Docker Compose v2 with multi-stage builds
- Implemented Docker Bake support for improved builds
- Created professional component structure with Tailwind CSS
- Added enhanced visual design with glass morphism effects
- Improved responsive layout and better UX flow
- Updated all dependencies and configurations
- Added proper TypeScript types and modern practices
- Created development scripts for easy container management
- Cleaned up excessive animations for better user experience
2025-07-14 10:11:06 +02:00

335 lines
6.8 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--font-heading: 'Fredoka One', cursive;
--font-body: 'Open Sans', sans-serif;
--primary-color: #667eea;
--secondary-color: #764ba2;
--accent-color: #f093fb;
--gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
--gradient-rainbow: linear-gradient(135deg, #667eea 0%, #764ba2 25%, #f093fb 50%, #f5576c 75%, #4facfe 100%);
--glass-primary: rgba(255, 255, 255, 0.25);
--glass-secondary: rgba(255, 255, 255, 0.15);
}
/* Custom animations */
@keyframes float {
0%, 100% {
transform: translateY(0px) rotate(0deg);
}
33% {
transform: translateY(-15px) rotate(1deg);
}
66% {
transform: translateY(-5px) rotate(-1deg);
}
}
@keyframes bounce-slow {
0%, 20%, 53%, 80%, 100% {
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
transform: translate3d(0,0,0);
}
40%, 43% {
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transform: translate3d(0, -30px, 0);
}
70% {
animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transform: translate3d(0, -15px, 0);
}
90% {
transform: translate3d(0,-4px,0);
}
}
@keyframes pulse-slow {
0%, 100% {
opacity: 0.6;
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(1.05);
}
}
@keyframes rainbow {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@keyframes sparkle {
0%, 100% { transform: scale(0) rotate(0deg); opacity: 0; }
50% { transform: scale(1) rotate(180deg); opacity: 1; }
}
@keyframes shimmer {
0% {
background-position: -1000px 0;
}
100% {
background-position: 1000px 0;
}
}
@keyframes glow {
0%, 100% {
box-shadow: 0 0 20px rgba(102, 126, 234, 0.3);
}
50% {
box-shadow: 0 0 40px rgba(102, 126, 234, 0.6), 0 0 60px rgba(118, 75, 162, 0.4);
}
}
@keyframes spin-slow {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
/* Utility classes */
.animate-float {
animation: float 6s ease-in-out infinite;
}
.animate-bounce-slow {
animation: bounce-slow 2s infinite;
}
.animate-pulse-slow {
animation: pulse-slow 3s ease-in-out infinite;
}
.animate-rainbow {
animation: rainbow 3s ease infinite;
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
background-size: 400% 400%;
}
.animate-shimmer {
animation: shimmer 2s infinite;
background: linear-gradient(
90deg,
transparent,
rgba(255, 255, 255, 0.4),
transparent
);
background-size: 1000px 100%;
}
.animate-glow {
animation: glow 3s ease-in-out infinite;
}
.animate-spin-slow {
animation: spin-slow 8s linear infinite;
}
/* Robot animations */
.robot-eye {
animation: blink 3s infinite;
}
@keyframes blink {
0%, 90%, 100% { height: 20px; }
95% { height: 2px; }
}
/* Glass morphism effect */
.glass {
background: var(--glass-primary);
backdrop-filter: blur(15px);
border: 1px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
}
.glass-secondary {
background: var(--glass-secondary);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
}
/* Button styles */
.btn-primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
font-weight: 600;
padding: 12px 24px;
border-radius: 16px;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
transform: translateY(0);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: none;
cursor: pointer;
position: relative;
overflow: hidden;
}
.btn-primary:hover {
background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%);
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
}
.btn-primary:active {
transform: translateY(0);
}
.btn-secondary {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
color: white;
font-weight: 600;
padding: 10px 20px;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(240, 147, 251, 0.3);
transform: translateY(0);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: none;
cursor: pointer;
}
.btn-secondary:hover {
background: linear-gradient(135deg, #e879f9 0%, #ef4444 100%);
transform: translateY(-1px);
box-shadow: 0 6px 18px rgba(240, 147, 251, 0.4);
}
/* Card styles */
.card {
background: white;
border-radius: 20px;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.1);
padding: 24px;
transform: translateY(0);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.card:hover {
box-shadow: 0 30px 70px rgba(0, 0, 0, 0.15);
transform: translateY(-8px);
}
.card-glass {
background: var(--glass-primary);
backdrop-filter: blur(15px);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 20px;
padding: 24px;
transform: scale(1);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
}
.card-glass:hover {
transform: scale(1.02);
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
}
/* Gradient text */
.gradient-text {
background: linear-gradient(135deg, #667eea 0%, #f093fb 50%, #667eea 100%);
background-size: 200% 200%;
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
animation: rainbow 4s ease infinite;
}
/* Interactive elements */
.interactive-hover {
transform: scale(1);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
}
.interactive-hover:hover {
transform: scale(1.05);
}
/* Sparkle effect */
.sparkle::before {
content: '✨';
position: absolute;
animation: sparkle 2s infinite;
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(45deg, #667eea, #764ba2);
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: linear-gradient(45deg, #5a67d8, #6b46c1);
}
/* Typography */
.heading-font {
font-family: var(--font-heading);
}
.body-font {
font-family: var(--font-body);
}
@keyframes blink {
0%, 90%, 100% {
transform: scaleY(1);
}
95% {
transform: scaleY(0.1);
}
}
/* Gradient backgrounds */
.gradient-primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.gradient-secondary {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
}
/* Glass morphism effect */
.glass {
background: rgba(255, 255, 255, 0.25);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.18);
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: #667eea;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #5a67d8;
}