/* Custom animations and global styles */ @keyframes float { 0%, 100% { transform: translateY(0px); } 50% { transform: translateY(-20px); } } @keyframes gradient-shift { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } } .animate-float { animation: float 6s ease-in-out infinite; } .gradient-animate { background: linear-gradient(-45deg, #0ea5e9, #d946ef, #0ea5e9, #d946ef); background-size: 400% 400%; animation: gradient-shift 15s ease infinite; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: #1f2937; } ::-webkit-scrollbar-thumb { background: #4b5563; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #6b7280; } /* Glass morphism effect */ .glass { background: rgba(31, 41, 55, 0.5); backdrop-filter: blur(10px); border: 1px solid rgba(75, 85, 99, 0.3); } /* Glow effects */ .glow-primary { box-shadow: 0 0 20px rgba(14, 165, 233, 0.5); } .glow-secondary { box-shadow: 0 0 20px rgba(217, 70, 239, 0.5); } /* Smooth transitions */ * { transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease; } /* Text selection */ ::selection { background: rgba(14, 165, 233, 0.3); } /* Focus styles */ .focus-ring:focus { outline: none; ring: 2px; ring-color: #0ea5e9; ring-offset: 2px; } /* Hover lift effect */ .hover-lift { transition: transform 0.2s ease; } .hover-lift:hover { transform: translateY(-4px); } /* Loading animation */ .loading-dots::after { content: ''; animation: dots 1.5s steps(4, end) infinite; } @keyframes dots { 0%, 20% { content: ''; } 40% { content: '.'; } 60% { content: '..'; } 80%, 100% { content: '...'; } } /* 3D Canvas styles */ #3d-canvas { width: 100%; height: 100%; display: block; border-radius: 8px; } /* Preview container enhancements */ #preview-container { position: relative; background: linear-gradient(135deg, #1e293b, #0f172a); border-radius: 12px; overflow: hidden; } #preview-container::before { content: ''; position: absolute; top: -2px; left: -2px; right: -2px; bottom: -2px; background: linear-gradient(45deg, #0ea5e9, #d946ef, #0ea5e9); border-radius: 12px; opacity: 0; transition: opacity 0.3s ease; z-index: -1; } #preview-container:hover::before { opacity: 0.3; } /* Loading spinner for canvas */ .canvas-loading { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 60px; height: 60px; border: 3px solid rgba(14, 165, 233, 0.3); border-top: 3px solid #0ea5e9; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: translate(-50%, -50%) rotate(0deg); } 100% { transform: translate(-50%, -50%) rotate(360deg); } } /* Style button active state */ .style-btn.active { background: linear-gradient(135deg, #0ea5e9, #d946ef); color: white; } /* Responsive grid adjustments */ @media (max-width: 768px) { .grid-responsive { grid-template-columns: 1fr; } }