@tailwind base; @tailwind components; @tailwind utilities; html { scroll-behavior: smooth; --wisp-x: 0; --wisp-y: 0; } body { margin: 0; min-height: 100svh; @apply font-sans text-villa-mist bg-[#0a1220]; } #root { min-height: 100svh; } ::selection { background: rgba(201, 162, 39, 0.35); color: #fff; } @keyframes float-leaf { 0%, 100% { transform: translateY(0) rotate(-2deg); opacity: 0.35; } 50% { transform: translateY(-14px) rotate(3deg); opacity: 0.55; } } @keyframes shimmer-btn { 0% { background-position: 0% 50%; } 100% { background-position: 200% 50%; } } @keyframes mist-drift { 0% { transform: translateX(-2%) translateY(0); } 50% { transform: translateX(2%) translateY(-1%); } 100% { transform: translateX(-2%) translateY(0); } } @keyframes wisp-path-a { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.55; } } @keyframes wisp-path-b { 0%, 100% { opacity: 0.2; transform: translateX(0); } 50% { opacity: 0.38; transform: translateX(18px); } } @keyframes wisp-mote { 0%, 100% { opacity: 0.25; transform: scale(1); } 50% { opacity: 0.85; transform: scale(1.4); } } @keyframes wisp-ribbon-drift { 0%, 100% { opacity: 0.28; } 50% { opacity: 0.42; } } .animate-wisp-path-a { animation: wisp-path-a 22s ease-in-out infinite; } .animate-wisp-path-b { animation: wisp-path-b 18s ease-in-out infinite; } .animate-wisp-mote { animation: wisp-mote 5s ease-in-out infinite; } .wisp-ribbon-a { animation: wisp-ribbon-drift 26s ease-in-out infinite; } .wisp-ribbon-b { animation: wisp-ribbon-drift 32s ease-in-out infinite 1s; } .wisp-ribbon-c { animation: wisp-ribbon-drift 20s ease-in-out infinite 0.5s; } .animate-mist { animation: mist-drift 28s ease-in-out infinite; } .animate-leaf { animation: float-leaf 9s ease-in-out infinite; } .btn-shimmer { background-size: 200% 200%; animation: shimmer-btn 8s linear infinite; } .glass-panel { background: linear-gradient( 135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.04) 50%, rgba(255, 255, 255, 0.08) 100% ); backdrop-filter: blur(14px); border: 1px solid rgba(255, 255, 255, 0.14); box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.12); } .text-balance { text-wrap: balance; }