Spaces:
Sleeping
Sleeping
| @import "tailwindcss"; | |
| @plugin "tailwindcss-animate"; | |
| @plugin "@tailwindcss/typography"; | |
| @custom-variant dark (&:is(.dark *)); | |
| /* ─────────────────────────────────────────────── | |
| NexaFlow Brand Palette | |
| ─────────────────────────────────────────────── */ | |
| :root { | |
| /* Rupam Portfolio Style - Neumorphic Light */ | |
| --background: 224 14% 90%; | |
| --foreground: 215 25% 27%; | |
| --card: 224 14% 90%; | |
| --card-foreground: 215 25% 27%; | |
| --popover: 224 14% 90%; | |
| --popover-foreground: 215 25% 27%; | |
| --primary: 248 73% 65%; | |
| --primary-foreground: 0 0% 100%; | |
| --secondary: 220 14% 96%; | |
| --secondary-foreground: 215 25% 27%; | |
| --muted: 220 14% 96%; | |
| --muted-foreground: 215 16% 47%; | |
| --accent: 248 73% 65%; | |
| --accent-foreground: 0 0% 100%; | |
| --destructive: 0 84% 60%; | |
| --destructive-foreground: 0 0% 100%; | |
| --border: 220 13% 91%; | |
| --input: 220 13% 91%; | |
| --ring: 248 73% 65%; | |
| --radius: 0.625rem; | |
| /* Semantic colors */ | |
| --success: 142 71% 45%; | |
| --success-foreground: 0 0% 100%; | |
| --warning: 38 92% 50%; | |
| --warning-foreground: 0 0% 100%; | |
| --info: 199 89% 48%; | |
| --info-foreground: 0 0% 100%; | |
| /* Chart colors */ | |
| --chart-1: 248 73% 65%; | |
| --chart-2: 160 60% 45%; | |
| --chart-3: 30 80% 55%; | |
| --chart-4: 280 65% 60%; | |
| --chart-5: 340 75% 55%; | |
| /* Neumorphism shadows - Rupam Style */ | |
| --neu-shadow-light: #ffffff; | |
| --neu-shadow-dark: #a3b1c6; | |
| --neu-distance: 20px; | |
| --neu-blur: 60px; | |
| --bg-primary: hsl(224, 14%, 90%); | |
| --bg-secondary: hsl(220, 14%, 96%); | |
| /* Floating blobs */ | |
| --blob-1: hsl(248, 73%, 65%); | |
| --blob-2: hsl(280, 65%, 60%); | |
| /* Gradient colors for premium look */ | |
| --gradient-start: 248 73% 65%; | |
| --gradient-mid: 270 70% 60%; | |
| --gradient-end: 290 65% 55%; | |
| } | |
| .dark { | |
| --background: 224 71% 4%; | |
| --foreground: 210 20% 98%; | |
| --card: 224 71% 4%; | |
| --card-foreground: 210 20% 98%; | |
| --popover: 224 71% 4%; | |
| --popover-foreground: 210 20% 98%; | |
| --primary: 248 73% 70%; | |
| --primary-foreground: 0 0% 100%; | |
| --secondary: 215 28% 17%; | |
| --secondary-foreground: 210 20% 98%; | |
| --muted: 215 28% 17%; | |
| --muted-foreground: 218 11% 65%; | |
| --accent: 248 73% 70%; | |
| --accent-foreground: 0 0% 100%; | |
| --destructive: 0 63% 31%; | |
| --destructive-foreground: 210 20% 98%; | |
| --border: 215 28% 17%; | |
| --input: 215 28% 17%; | |
| --ring: 248 73% 70%; | |
| /* Semantic colors (dark) */ | |
| --success: 142 71% 35%; | |
| --success-foreground: 0 0% 100%; | |
| --warning: 38 92% 40%; | |
| --warning-foreground: 0 0% 100%; | |
| --info: 199 89% 38%; | |
| --info-foreground: 0 0% 100%; | |
| /* Chart colors (dark) */ | |
| --chart-1: 248 73% 70%; | |
| --chart-2: 160 50% 40%; | |
| --chart-3: 30 70% 50%; | |
| --chart-4: 280 55% 55%; | |
| --chart-5: 340 65% 50%; | |
| /* Neumorphism shadows (dark) */ | |
| --neu-shadow-light: rgba(255, 255, 255, 0.05); | |
| --neu-shadow-dark: rgba(0, 0, 0, 0.5); | |
| --neu-distance: 20px; | |
| --neu-blur: 60px; | |
| --bg-primary: hsl(224, 71%, 4%); | |
| --bg-secondary: hsl(215, 28%, 17%); | |
| /* Floating blobs */ | |
| --blob-1: hsl(248, 73%, 70%); | |
| --blob-2: hsl(280, 55%, 55%); | |
| } | |
| /* ─────────────────────────────────────────────── | |
| Theme Mapping (Tailwind v4) | |
| ─────────────────────────────────────────────── */ | |
| @theme inline { | |
| --color-background: hsl(var(--background)); | |
| --color-foreground: hsl(var(--foreground)); | |
| --color-card: hsl(var(--card)); | |
| --color-card-foreground: hsl(var(--card-foreground)); | |
| --color-popover: hsl(var(--popover)); | |
| --color-popover-foreground: hsl(var(--popover-foreground)); | |
| --color-primary: hsl(var(--primary)); | |
| --color-primary-foreground: hsl(var(--primary-foreground)); | |
| --color-secondary: hsl(var(--secondary)); | |
| --color-secondary-foreground: hsl(var(--secondary-foreground)); | |
| --color-muted: hsl(var(--muted)); | |
| --color-muted-foreground: hsl(var(--muted-foreground)); | |
| --color-accent: hsl(var(--accent)); | |
| --color-accent-foreground: hsl(var(--accent-foreground)); | |
| --color-destructive: hsl(var(--destructive)); | |
| --color-destructive-foreground: hsl(var(--destructive-foreground)); | |
| --color-border: hsl(var(--border)); | |
| --color-input: hsl(var(--input)); | |
| --color-ring: hsl(var(--ring)); | |
| --color-chart-1: hsl(var(--chart-1)); | |
| --color-chart-2: hsl(var(--chart-2)); | |
| --color-chart-3: hsl(var(--chart-3)); | |
| --color-chart-4: hsl(var(--chart-4)); | |
| --color-chart-5: hsl(var(--chart-5)); | |
| /* Semantic */ | |
| --color-success: hsl(var(--success)); | |
| --color-success-foreground: hsl(var(--success-foreground)); | |
| --color-warning: hsl(var(--warning)); | |
| --color-warning-foreground: hsl(var(--warning-foreground)); | |
| --color-info: hsl(var(--info)); | |
| --color-info-foreground: hsl(var(--info-foreground)); | |
| /* Radius */ | |
| --radius-sm: calc(var(--radius) - 4px); | |
| --radius-md: calc(var(--radius) - 2px); | |
| --radius-lg: var(--radius); | |
| --radius-xl: calc(var(--radius) + 4px); | |
| --radius-2xl: calc(var(--radius) + 8px); | |
| --radius-3xl: calc(var(--radius) + 12px); | |
| } | |
| /* ─────────────────────────────────────────────── | |
| Utilities | |
| ─────────────────────────────────────────────── */ | |
| @layer utilities { | |
| .container { | |
| margin-inline: auto; | |
| padding-inline: 1.5rem; | |
| } | |
| @media (min-width: 640px) { | |
| .container { | |
| max-width: 640px; | |
| } | |
| } | |
| @media (min-width: 768px) { | |
| .container { | |
| max-width: 768px; | |
| padding-inline: 2rem; | |
| } | |
| } | |
| @media (min-width: 1024px) { | |
| .container { | |
| max-width: 1024px; | |
| } | |
| } | |
| @media (min-width: 1280px) { | |
| .container { | |
| max-width: 1280px; | |
| } | |
| } | |
| /* Smooth scroll behavior */ | |
| .smooth-scroll { | |
| scroll-behavior: smooth; | |
| -webkit-overflow-scrolling: touch; | |
| } | |
| /* Hide scrollbar but keep functionality */ | |
| .scrollbar-hide { | |
| -ms-overflow-style: none; | |
| scrollbar-width: none; | |
| } | |
| .scrollbar-hide::-webkit-scrollbar { | |
| display: none; | |
| } | |
| /* Better focus styles */ | |
| .focus-ring { | |
| @apply outline-none ring-2 ring-primary/50 ring-offset-2; | |
| } | |
| /* Text balance for better typography */ | |
| .text-balance { | |
| text-wrap: balance; | |
| } | |
| /* Glass effect */ | |
| .glass { | |
| background: hsl(var(--background) / 0.8); | |
| backdrop-filter: blur(12px); | |
| -webkit-backdrop-filter: blur(12px); | |
| } | |
| /* Gradient border */ | |
| .gradient-border { | |
| position: relative; | |
| } | |
| .gradient-border::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| border-radius: inherit; | |
| padding: 1px; | |
| background: linear-gradient(135deg, hsl(var(--primary)), hsl(var(--accent))); | |
| -webkit-mask: | |
| linear-gradient(#fff 0 0) content-box, | |
| linear-gradient(#fff 0 0); | |
| -webkit-mask-composite: xor; | |
| mask-composite: exclude; | |
| pointer-events: none; | |
| } | |
| /* Section spacing */ | |
| .section-py { | |
| @apply py-16 md:py-20 lg:py-24; | |
| } | |
| /* Hide on scroll utility */ | |
| .hide-on-scroll { | |
| transform: translateY(0); | |
| transition: transform 0.3s ease; | |
| } | |
| .hide-on-scroll.scrolled { | |
| transform: translateY(-100%); | |
| } | |
| } | |
| /* ─────────────────────────────────────────────── | |
| Base Layer — Typography Scale & Defaults | |
| ─────────────────────────────────────────────── */ | |
| @layer base { | |
| * { | |
| @apply border-border outline-ring/50; | |
| } | |
| body { | |
| @apply bg-background text-foreground; | |
| font-feature-settings: "rlig" 1, "calt" 1; | |
| font-optical-sizing: auto; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| text-rendering: optimizeLegibility; | |
| } | |
| h1, h2, h3, h4, h5, h6 { | |
| font-weight: 700; | |
| letter-spacing: -0.02em; | |
| line-height: 1.2; | |
| font-family: var(--font-heading), var(--font-sans); | |
| } | |
| h1 { | |
| font-size: clamp(2.5rem, 5vw, 4rem); | |
| } | |
| h2 { | |
| font-size: clamp(2rem, 4vw, 3rem); | |
| } | |
| h3 { | |
| font-size: clamp(1.5rem, 3vw, 2rem); | |
| } | |
| h4 { | |
| font-size: clamp(1.25rem, 2.5vw, 1.5rem); | |
| } | |
| /* Font family utilities */ | |
| .font-heading { | |
| font-family: var(--font-heading), var(--font-sans); | |
| } | |
| /* Utility typography classes */ | |
| .text-body { | |
| @apply text-base leading-relaxed; | |
| } | |
| .text-caption { | |
| @apply text-sm text-muted-foreground; | |
| } | |
| .text-overline { | |
| @apply text-xs font-semibold uppercase tracking-widest text-muted-foreground; | |
| } | |
| } | |
| /* ─────────────────────────────────────────────── | |
| CSS Animations (replacing Framer Motion) | |
| ─────────────────────────────────────────────── */ | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes fadeInUp { | |
| from { | |
| opacity: 0; | |
| transform: translateY(20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes fadeInDown { | |
| from { | |
| opacity: 0; | |
| transform: translateY(-12px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes scaleIn { | |
| from { | |
| opacity: 0; | |
| transform: scale(0.95); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| } | |
| @keyframes slideInLeft { | |
| from { | |
| opacity: 0; | |
| transform: translateX(-20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| @keyframes slideInRight { | |
| from { | |
| opacity: 0; | |
| transform: translateX(20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| @keyframes shimmer { | |
| 0% { | |
| background-position: -1000px 0; | |
| } | |
| 100% { | |
| background-position: 1000px 0; | |
| } | |
| } | |
| @keyframes float { | |
| 0%, 100% { | |
| transform: translateY(0px); | |
| } | |
| 50% { | |
| transform: translateY(-10px); | |
| } | |
| } | |
| @keyframes pulse-glow { | |
| 0%, 100% { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| 50% { | |
| opacity: 0.8; | |
| transform: scale(1.05); | |
| } | |
| } | |
| @keyframes gradient-shift { | |
| 0%, 100% { | |
| background-position: 0% 50%; | |
| } | |
| 50% { | |
| background-position: 100% 50%; | |
| } | |
| } | |
| .animate-fade-in { | |
| animation: fadeIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; | |
| } | |
| .animate-fade-in-up { | |
| animation: fadeInUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; | |
| } | |
| .animate-fade-in-down { | |
| animation: fadeInDown 0.5s ease-out both; | |
| } | |
| .animate-scale-in { | |
| animation: scaleIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) both; | |
| } | |
| .animate-slide-in-left { | |
| animation: slideInLeft 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; | |
| } | |
| .animate-slide-in-right { | |
| animation: slideInRight 0.6s cubic-bezier(0.16, 1, 0.3, 1) both; | |
| } | |
| .animate-shimmer { | |
| background: linear-gradient( | |
| 90deg, | |
| transparent 0%, | |
| rgba(255, 255, 255, 0.1) 50%, | |
| transparent 100% | |
| ); | |
| background-size: 1000px 100%; | |
| animation: shimmer 3s infinite; | |
| } | |
| .animate-float { | |
| animation: float 3s ease-in-out infinite; | |
| } | |
| .animate-pulse-glow { | |
| animation: pulse-glow 2s ease-in-out infinite; | |
| } | |
| .animate-gradient { | |
| background-size: 200% 200%; | |
| animation: gradient-shift 8s ease infinite; | |
| } | |
| /* Stagger delays */ | |
| .animate-delay-1 { | |
| animation-delay: 0.1s; | |
| } | |
| .animate-delay-2 { | |
| animation-delay: 0.2s; | |
| } | |
| .animate-delay-3 { | |
| animation-delay: 0.3s; | |
| } | |
| .animate-delay-4 { | |
| animation-delay: 0.4s; | |
| } | |
| .animate-delay-5 { | |
| animation-delay: 0.5s; | |
| } | |
| .animate-delay-6 { | |
| animation-delay: 0.6s; | |
| } | |
| .animate-delay-7 { | |
| animation-delay: 0.7s; | |
| } | |
| /* Hover effects */ | |
| .hover-lift { | |
| transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.3s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| .hover-lift:hover { | |
| transform: translateY(-4px); | |
| } | |
| .hover-glow { | |
| transition: box-shadow 0.3s ease; | |
| } | |
| .hover-glow:hover { | |
| box-shadow: 0 0 20px rgba(var(--primary), 0.3); | |
| } | |
| /* Neumorphism styles */ | |
| .neu-flat { | |
| background: hsl(var(--background)); | |
| box-shadow: | |
| var(--neu-distance) var(--neu-distance) var(--neu-blur) var(--neu-shadow-dark), | |
| calc(var(--neu-distance) * -1) calc(var(--neu-distance) * -1) var(--neu-blur) var(--neu-shadow-light); | |
| border: none; | |
| transition: all 0.3s ease; | |
| } | |
| .neu-flat:hover { | |
| box-shadow: | |
| calc(var(--neu-distance) * 1.25) calc(var(--neu-distance) * 1.25) calc(var(--neu-blur) * 1.25) var(--neu-shadow-dark), | |
| calc(var(--neu-distance) * -1.25) calc(var(--neu-distance) * -1.25) calc(var(--neu-blur) * 1.25) var(--neu-shadow-light); | |
| } | |
| .neu-pressed { | |
| background: hsl(var(--background)); | |
| box-shadow: | |
| inset var(--neu-distance) var(--neu-distance) var(--neu-blur) var(--neu-shadow-dark), | |
| inset calc(var(--neu-distance) * -1) calc(var(--neu-distance) * -1) var(--neu-blur) var(--neu-shadow-light); | |
| border: none; | |
| transition: all 0.3s ease; | |
| } | |
| .neu-convex { | |
| background: linear-gradient(145deg, hsl(var(--background)), hsl(var(--muted))); | |
| box-shadow: | |
| var(--neu-distance) var(--neu-distance) var(--neu-blur) var(--neu-shadow-dark), | |
| calc(var(--neu-distance) * -1) calc(var(--neu-distance) * -1) var(--neu-blur) var(--neu-shadow-light); | |
| border: none; | |
| transition: all 0.3s ease; | |
| } | |
| .neu-convex:hover { | |
| box-shadow: | |
| inset 4px 4px 8px var(--neu-shadow-dark), | |
| inset -4px -4px 8px var(--neu-shadow-light); | |
| } | |
| .neu-concave { | |
| background: linear-gradient(145deg, hsl(var(--muted)), hsl(var(--background))); | |
| box-shadow: | |
| inset 5px 5px 10px var(--neu-shadow-dark), | |
| inset -5px -5px 10px var(--neu-shadow-light); | |
| border: none; | |
| transition: all 0.3s ease; | |
| } | |
| .neu-button { | |
| background: hsl(var(--background)); | |
| box-shadow: | |
| 8px 8px 16px var(--neu-shadow-dark), | |
| -8px -8px 16px var(--neu-shadow-light); | |
| border: none; | |
| transition: all 0.3s ease; | |
| } | |
| .neu-button:hover { | |
| transform: translateY(-2px); | |
| box-shadow: | |
| 10px 10px 20px var(--neu-shadow-dark), | |
| -10px -10px 20px var(--neu-shadow-light); | |
| } | |
| .neu-button:active { | |
| transform: translateY(0); | |
| box-shadow: | |
| inset 4px 4px 8px var(--neu-shadow-dark), | |
| inset -4px -4px 8px var(--neu-shadow-light); | |
| } | |
| .neu-card { | |
| background: hsl(var(--background)); | |
| box-shadow: | |
| 12px 12px 24px var(--neu-shadow-dark), | |
| -12px -12px 24px var(--neu-shadow-light); | |
| border: none; | |
| border-radius: 30px; | |
| transition: all 0.3s ease; | |
| } | |
| .neu-card:hover { | |
| box-shadow: | |
| 16px 16px 32px var(--neu-shadow-dark), | |
| -16px -16px 32px var(--neu-shadow-light); | |
| } | |
| .neu-input { | |
| background: hsl(var(--background)); | |
| box-shadow: | |
| inset 4px 4px 8px var(--neu-shadow-dark), | |
| inset -4px -4px 8px var(--neu-shadow-light); | |
| border: none; | |
| border-radius: 12px; | |
| padding: 12px 16px; | |
| transition: all 0.3s ease; | |
| } | |
| .neu-input:focus { | |
| box-shadow: | |
| inset 6px 6px 12px var(--neu-shadow-dark), | |
| inset -6px -6px 12px var(--neu-shadow-light); | |
| outline: none; | |
| } | |
| /* Advanced animation utilities */ | |
| .animate-on-scroll { | |
| opacity: 0; | |
| animation: fadeInUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| .bounce-subtle { | |
| animation: bounceSubtle 2s ease-in-out infinite; | |
| } | |
| @keyframes bounceSubtle { | |
| 0%, 100% { | |
| transform: translateY(0); | |
| } | |
| 50% { | |
| transform: translateY(-5px); | |
| } | |
| } | |
| .rotate-slow { | |
| animation: rotateSlow 20s linear infinite; | |
| } | |
| @keyframes rotateSlow { | |
| from { | |
| transform: rotate(0deg); | |
| } | |
| to { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| .perspective-card { | |
| perspective: 1000px; | |
| transform-style: preserve-3d; | |
| transition: all 0.3s ease; | |
| } | |
| /* Premium gradient text */ | |
| .gradient-text { | |
| background: linear-gradient(135deg, hsl(var(--gradient-start)), hsl(var(--gradient-mid)), hsl(var(--gradient-end))); | |
| background-size: 200% 200%; | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| animation: gradientShift 8s ease infinite; | |
| } | |
| @keyframes gradientShift { | |
| 0%, 100% { | |
| background-position: 0% 50%; | |
| } | |
| 50% { | |
| background-position: 100% 50%; | |
| } | |
| } | |
| /* Floating background blobs */ | |
| .floating-blob { | |
| position: absolute; | |
| border-radius: 50%; | |
| filter: blur(80px); | |
| opacity: 0.3; | |
| animation: float 20s ease-in-out infinite; | |
| pointer-events: none; | |
| z-index: 0; | |
| } | |
| .floating-blob-1 { | |
| background: var(--blob-1); | |
| width: 400px; | |
| height: 400px; | |
| top: -200px; | |
| right: -100px; | |
| animation-delay: 0s; | |
| } | |
| .floating-blob-2 { | |
| background: var(--blob-2); | |
| width: 350px; | |
| height: 350px; | |
| bottom: -150px; | |
| left: -100px; | |
| animation-delay: 5s; | |
| } | |
| @keyframes float { | |
| 0%, 100% { | |
| transform: translate(0, 0) scale(1); | |
| } | |
| 33% { | |
| transform: translate(30px, -30px) scale(1.1); | |
| } | |
| 66% { | |
| transform: translate(-20px, 20px) scale(0.9); | |
| } | |
| } | |
| /* Shimmer effect for premium feel */ | |
| .shimmer { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .shimmer::after { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: -100%; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); | |
| animation: shimmer 3s infinite; | |
| } | |
| @keyframes shimmer { | |
| 0% { | |
| left: -100%; | |
| } | |
| 100% { | |
| left: 100%; | |
| } | |
| } | |
| /* Glow effect on hover */ | |
| .glow-on-hover { | |
| position: relative; | |
| transition: all 0.3s ease; | |
| } | |
| .glow-on-hover::before { | |
| content: ''; | |
| position: absolute; | |
| inset: -2px; | |
| border-radius: inherit; | |
| background: linear-gradient(135deg, hsl(var(--primary)), hsl(var(--accent))); | |
| opacity: 0; | |
| transition: opacity 0.3s ease; | |
| z-index: -1; | |
| filter: blur(10px); | |
| } | |
| .glow-on-hover:hover::before { | |
| opacity: 0.6; | |
| } | |
| /* 3D Card Tilt Effect */ | |
| .card-3d { | |
| transform-style: preserve-3d; | |
| transition: transform 0.3s ease; | |
| } | |
| .card-3d:hover { | |
| transform: translateY(-8px); | |
| } | |
| /* Scroll reveal animations */ | |
| @keyframes reveal-up { | |
| from { | |
| opacity: 0; | |
| transform: translateY(40px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes reveal-left { | |
| from { | |
| opacity: 0; | |
| transform: translateX(-40px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| @keyframes reveal-right { | |
| from { | |
| opacity: 0; | |
| transform: translateX(40px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| @keyframes scale-in { | |
| from { | |
| opacity: 0; | |
| transform: scale(0.9); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| } | |
| .reveal-up { | |
| animation: reveal-up 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| .reveal-left { | |
| animation: reveal-left 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| .reveal-right { | |
| animation: reveal-right 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| .scale-in { | |
| animation: scale-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| /* Magnetic button effect */ | |
| .magnetic-button { | |
| position: relative; | |
| transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| /* Text gradient animation */ | |
| .text-shimmer { | |
| background: linear-gradient(90deg, | |
| hsl(var(--foreground)) 0%, | |
| hsl(var(--primary)) 50%, | |
| hsl(var(--foreground)) 100% | |
| ); | |
| background-size: 200% auto; | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| animation: text-shimmer 3s linear infinite; | |
| } | |
| @keyframes text-shimmer { | |
| to { | |
| background-position: 200% center; | |
| } | |
| } | |
| /* Pulse animation for icons */ | |
| .pulse-icon { | |
| animation: pulse-icon 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; | |
| } | |
| @keyframes pulse-icon { | |
| 0%, 100% { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| 50% { | |
| opacity: 0.8; | |
| transform: scale(1.05); | |
| } | |
| } | |
| /* Stagger children animation */ | |
| .stagger-children > * { | |
| opacity: 0; | |
| animation: reveal-up 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| .stagger-children > *:nth-child(1) { animation-delay: 0.1s; } | |
| .stagger-children > *:nth-child(2) { animation-delay: 0.2s; } | |
| .stagger-children > *:nth-child(3) { animation-delay: 0.3s; } | |
| .stagger-children > *:nth-child(4) { animation-delay: 0.4s; } | |
| .stagger-children > *:nth-child(5) { animation-delay: 0.5s; } | |
| .stagger-children > *:nth-child(6) { animation-delay: 0.6s; } | |
| /* ─────────────────────────────────────────────── | |
| Creative UI Enhancements | |
| ─────────────────────────────────────────────── */ | |
| /* Animated gradient mesh background */ | |
| .gradient-mesh { | |
| background: | |
| radial-gradient(at 40% 20%, hsla(248, 73%, 65%, 0.3) 0px, transparent 50%), | |
| radial-gradient(at 80% 0%, hsla(280, 65%, 60%, 0.2) 0px, transparent 50%), | |
| radial-gradient(at 0% 50%, hsla(199, 89%, 48%, 0.2) 0px, transparent 50%), | |
| radial-gradient(at 80% 50%, hsla(340, 75%, 55%, 0.15) 0px, transparent 50%), | |
| radial-gradient(at 0% 100%, hsla(30, 80%, 55%, 0.2) 0px, transparent 50%), | |
| radial-gradient(at 80% 100%, hsla(160, 60%, 45%, 0.15) 0px, transparent 50%); | |
| animation: gradient-mesh-move 20s ease infinite; | |
| } | |
| @keyframes gradient-mesh-move { | |
| 0%, 100% { | |
| background-position: 0% 0%, 100% 0%, 0% 50%, 100% 50%, 0% 100%, 100% 100%; | |
| } | |
| 25% { | |
| background-position: 100% 0%, 0% 50%, 50% 0%, 0% 100%, 50% 50%, 0% 0%; | |
| } | |
| 50% { | |
| background-position: 100% 100%, 0% 0%, 100% 50%, 50% 0%, 100% 0%, 50% 50%; | |
| } | |
| 75% { | |
| background-position: 0% 100%, 100% 50%, 0% 0%, 100% 0%, 50% 50%, 100% 100%; | |
| } | |
| } | |
| /* Noise texture overlay for depth */ | |
| .noise-overlay { | |
| position: relative; | |
| } | |
| .noise-overlay::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E"); | |
| opacity: 0.03; | |
| pointer-events: none; | |
| z-index: 1; | |
| } | |
| /* Morphing blob shapes */ | |
| @keyframes morph-blob { | |
| 0%, 100% { | |
| border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; | |
| } | |
| 25% { | |
| border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%; | |
| } | |
| 50% { | |
| border-radius: 50% 60% 30% 60% / 30% 60% 70% 40%; | |
| } | |
| 75% { | |
| border-radius: 60% 40% 60% 30% / 70% 30% 50% 60%; | |
| } | |
| } | |
| .morphing-blob { | |
| animation: morph-blob 15s ease-in-out infinite; | |
| } | |
| /* Floating particles effect */ | |
| @keyframes float-particle { | |
| 0%, 100% { | |
| transform: translateY(0) translateX(0) rotate(0deg); | |
| opacity: 0.3; | |
| } | |
| 25% { | |
| transform: translateY(-100px) translateX(50px) rotate(90deg); | |
| opacity: 0.6; | |
| } | |
| 50% { | |
| transform: translateY(-200px) translateX(-30px) rotate(180deg); | |
| opacity: 0.3; | |
| } | |
| 75% { | |
| transform: translateY(-100px) translateX(-50px) rotate(270deg); | |
| opacity: 0.6; | |
| } | |
| } | |
| .particle { | |
| position: absolute; | |
| width: 6px; | |
| height: 6px; | |
| border-radius: 50%; | |
| background: hsl(var(--primary)); | |
| opacity: 0.3; | |
| animation: float-particle 20s ease-in-out infinite; | |
| } | |
| /* Enhanced glass effect with animated border */ | |
| .glass-card { | |
| background: hsl(var(--background) / 0.6); | |
| backdrop-filter: blur(20px); | |
| -webkit-backdrop-filter: blur(20px); | |
| border: 1px solid hsl(var(--border) / 0.3); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .glass-card::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: linear-gradient( | |
| 135deg, | |
| hsl(var(--primary) / 0.1) 0%, | |
| transparent 50%, | |
| hsl(var(--accent) / 0.1) 100% | |
| ); | |
| opacity: 0; | |
| transition: opacity 0.5s ease; | |
| } | |
| .glass-card:hover::before { | |
| opacity: 1; | |
| } | |
| /* Animated gradient border */ | |
| .animated-border { | |
| position: relative; | |
| background: hsl(var(--background)); | |
| border-radius: var(--radius-lg); | |
| } | |
| .animated-border::before { | |
| content: ''; | |
| position: absolute; | |
| inset: -2px; | |
| border-radius: inherit; | |
| background: conic-gradient( | |
| from var(--angle, 0deg), | |
| hsl(var(--primary)), | |
| hsl(280, 65%, 60%), | |
| hsl(320, 75%, 55%), | |
| hsl(var(--primary)) | |
| ); | |
| z-index: -1; | |
| animation: rotate-gradient 4s linear infinite; | |
| } | |
| @keyframes rotate-gradient { | |
| to { | |
| --angle: 360deg; | |
| } | |
| } | |
| @property --angle { | |
| syntax: '<angle>'; | |
| initial-value: 0deg; | |
| inherits: false; | |
| } | |
| /* Split color text effect */ | |
| .split-color-text { | |
| background: linear-gradient( | |
| 135deg, | |
| hsl(var(--foreground)) 0%, | |
| hsl(var(--foreground)) 50%, | |
| hsl(var(--primary)) 50%, | |
| hsl(var(--primary)) 100% | |
| ); | |
| background-size: 200% 100%; | |
| background-position: 100% 0; | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| transition: background-position 0.5s ease; | |
| } | |
| .split-color-text:hover { | |
| background-position: 0 0; | |
| } | |
| /* 3D perspective card with depth */ | |
| .card-3d-depth { | |
| transform-style: preserve-3d; | |
| perspective: 1000px; | |
| transition: transform 0.6s cubic-bezier(0.23, 1, 0.32, 1); | |
| } | |
| .card-3d-depth:hover { | |
| transform: rotateY(-5deg) rotateX(5deg) translateZ(20px); | |
| } | |
| .card-3d-depth::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: linear-gradient( | |
| 135deg, | |
| hsl(var(--primary) / 0.1) 0%, | |
| transparent 100% | |
| ); | |
| opacity: 0; | |
| transition: opacity 0.3s ease; | |
| border-radius: inherit; | |
| z-index: -1; | |
| } | |
| .card-3d-depth:hover::before { | |
| opacity: 1; | |
| } | |
| /* Spotlight hover effect */ | |
| .spotlight-card { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .spotlight-card::after { | |
| content: ''; | |
| position: absolute; | |
| width: 200px; | |
| height: 200px; | |
| background: radial-gradient( | |
| circle, | |
| hsl(var(--primary) / 0.15) 0%, | |
| transparent 70% | |
| ); | |
| border-radius: 50%; | |
| pointer-events: none; | |
| opacity: 0; | |
| transform: translate(-50%, -50%); | |
| transition: opacity 0.3s ease; | |
| } | |
| .spotlight-card:hover::after { | |
| opacity: 1; | |
| } | |
| /* Typewriter effect */ | |
| .typewriter { | |
| overflow: hidden; | |
| border-right: 2px solid hsl(var(--primary)); | |
| white-space: nowrap; | |
| animation: typing 3.5s steps(40, end), blink-caret 0.75s step-end infinite; | |
| } | |
| @keyframes typing { | |
| from { width: 0; } | |
| to { width: 100%; } | |
| } | |
| @keyframes blink-caret { | |
| from, to { border-color: transparent; } | |
| 50% { border-color: hsl(var(--primary)); } | |
| } | |
| /* Glitch text effect */ | |
| .glitch-text { | |
| position: relative; | |
| } | |
| .glitch-text::before, | |
| .glitch-text::after { | |
| content: attr(data-text); | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| } | |
| .glitch-text::before { | |
| animation: glitch-1 0.3s infinite linear alternate-reverse; | |
| color: hsl(0, 100%, 50%); | |
| z-index: -1; | |
| } | |
| .glitch-text::after { | |
| animation: glitch-2 0.3s infinite linear alternate-reverse; | |
| color: hsl(180, 100%, 50%); | |
| z-index: -2; | |
| } | |
| @keyframes glitch-1 { | |
| 0% { clip-path: inset(20% 0 60% 0); transform: translate(-2px, 2px); } | |
| 20% { clip-path: inset(60% 0 20% 0); transform: translate(2px, -2px); } | |
| 40% { clip-path: inset(40% 0 40% 0); transform: translate(-2px, 0); } | |
| 60% { clip-path: inset(80% 0 0% 0); transform: translate(0, 2px); } | |
| 80% { clip-path: inset(0% 0 80% 0); transform: translate(2px, 0); } | |
| 100% { clip-path: inset(50% 0 30% 0); transform: translate(-2px, -2px); } | |
| } | |
| @keyframes glitch-2 { | |
| 0% { clip-path: inset(60% 0 20% 0); transform: translate(2px, -2px); } | |
| 20% { clip-path: inset(20% 0 60% 0); transform: translate(-2px, 2px); } | |
| 40% { clip-path: inset(80% 0 0% 0); transform: translate(2px, 0); } | |
| 60% { clip-path: inset(40% 0 40% 0); transform: translate(0, -2px); } | |
| 80% { clip-path: inset(50% 0 30% 0); transform: translate(-2px, 0); } | |
| 100% { clip-path: inset(0% 0 80% 0); transform: translate(2px, 2px); } | |
| } | |
| /* Neon glow effect */ | |
| .neon-glow { | |
| text-shadow: | |
| 0 0 5px hsl(var(--primary)), | |
| 0 0 10px hsl(var(--primary)), | |
| 0 0 20px hsl(var(--primary)), | |
| 0 0 40px hsl(var(--primary)); | |
| animation: neon-pulse 2s ease-in-out infinite; | |
| } | |
| @keyframes neon-pulse { | |
| 0%, 100% { | |
| text-shadow: | |
| 0 0 5px hsl(var(--primary)), | |
| 0 0 10px hsl(var(--primary)), | |
| 0 0 20px hsl(var(--primary)), | |
| 0 0 40px hsl(var(--primary)); | |
| } | |
| 50% { | |
| text-shadow: | |
| 0 0 2px hsl(var(--primary)), | |
| 0 0 5px hsl(var(--primary)), | |
| 0 0 10px hsl(var(--primary)), | |
| 0 0 20px hsl(var(--primary)); | |
| } | |
| } | |
| /* Ripple button effect */ | |
| .ripple-button { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .ripple-button::after { | |
| content: ''; | |
| position: absolute; | |
| width: 100%; | |
| height: 100%; | |
| top: 0; | |
| left: 0; | |
| background: radial-gradient(circle, hsl(var(--primary-foreground) / 0.3) 10%, transparent 10%); | |
| background-size: 0 0; | |
| background-position: center; | |
| transition: background-size 0.5s ease; | |
| } | |
| .ripple-button:active::after { | |
| background-size: 200% 200%; | |
| } | |
| /* Aurora background effect */ | |
| .aurora-bg { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .aurora-bg::before { | |
| content: ''; | |
| position: absolute; | |
| top: -50%; | |
| left: -50%; | |
| width: 200%; | |
| height: 200%; | |
| background: | |
| conic-gradient(from 0deg at 50% 50%, hsla(248, 73%, 65%, 0.3) 0deg, transparent 60deg), | |
| conic-gradient(from 120deg at 50% 50%, hsla(280, 65%, 60%, 0.2) 0deg, transparent 60deg), | |
| conic-gradient(from 240deg at 50% 50%, hsla(199, 89%, 48%, 0.2) 0deg, transparent 60deg); | |
| animation: aurora-rotate 30s linear infinite; | |
| opacity: 0.5; | |
| } | |
| @keyframes aurora-rotate { | |
| to { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| /* Scroll indicator */ | |
| .scroll-indicator { | |
| width: 30px; | |
| height: 50px; | |
| border: 2px solid hsl(var(--primary) / 0.5); | |
| border-radius: 25px; | |
| position: relative; | |
| } | |
| .scroll-indicator::before { | |
| content: ''; | |
| position: absolute; | |
| top: 8px; | |
| left: 50%; | |
| width: 6px; | |
| height: 6px; | |
| background: hsl(var(--primary)); | |
| border-radius: 50%; | |
| transform: translateX(-50%); | |
| animation: scroll-bounce 2s ease-in-out infinite; | |
| } | |
| @keyframes scroll-bounce { | |
| 0%, 100% { top: 8px; opacity: 1; } | |
| 50% { top: 32px; opacity: 0.3; } | |
| } | |
| /* Reveal animation on scroll */ | |
| .reveal { | |
| opacity: 0; | |
| transform: translateY(30px); | |
| transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| .reveal.visible { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| .reveal-left { | |
| opacity: 0; | |
| transform: translateX(-50px); | |
| transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| .reveal-left.visible { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| .reveal-right { | |
| opacity: 0; | |
| transform: translateX(50px); | |
| transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| .reveal-right.visible { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| .reveal-scale { | |
| opacity: 0; | |
| transform: scale(0.9); | |
| transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| .reveal-scale.visible { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| /* Interactive underline */ | |
| .interactive-underline { | |
| position: relative; | |
| display: inline-block; | |
| } | |
| .interactive-underline::after { | |
| content: ''; | |
| position: absolute; | |
| bottom: -4px; | |
| left: 0; | |
| width: 0; | |
| height: 3px; | |
| background: linear-gradient(90deg, hsl(var(--primary)), hsl(var(--accent))); | |
| border-radius: 2px; | |
| transition: width 0.4s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| .interactive-underline:hover::after { | |
| width: 100%; | |
| } | |
| /* Counter animation */ | |
| .counter-animate { | |
| display: inline-block; | |
| animation: counter-pop 0.6s cubic-bezier(0.16, 1, 0.3, 1); | |
| } | |
| @keyframes counter-pop { | |
| 0% { transform: scale(1); } | |
| 50% { transform: scale(1.2); } | |
| 100% { transform: scale(1); } | |
| } | |
| /* Shine effect */ | |
| .shine-effect { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .shine-effect::after { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: -100%; | |
| width: 50%; | |
| height: 100%; | |
| background: linear-gradient( | |
| 90deg, | |
| transparent, | |
| hsl(var(--primary-foreground) / 0.2), | |
| transparent | |
| ); | |
| transform: skewX(-25deg); | |
| transition: left 0.5s ease; | |
| } | |
| .shine-effect:hover::after { | |
| left: 150%; | |
| } | |
| /* Orbit animation */ | |
| .orbit { | |
| animation: orbit-spin 20s linear infinite; | |
| } | |
| @keyframes orbit-spin { | |
| from { transform: rotate(0deg) translateX(100px) rotate(0deg); } | |
| to { transform: rotate(360deg) translateX(100px) rotate(-360deg); } | |
| } | |
| /* Wave text effect */ | |
| .wave-text span { | |
| display: inline-block; | |
| animation: wave 1s ease-in-out infinite; | |
| } | |
| .wave-text span:nth-child(1) { animation-delay: 0s; } | |
| .wave-text span:nth-child(2) { animation-delay: 0.1s; } | |
| .wave-text span:nth-child(3) { animation-delay: 0.2s; } | |
| .wave-text span:nth-child(4) { animation-delay: 0.3s; } | |
| .wave-text span:nth-child(5) { animation-delay: 0.4s; } | |
| .wave-text span:nth-child(6) { animation-delay: 0.5s; } | |
| @keyframes wave { | |
| 0%, 100% { transform: translateY(0); } | |
| 50% { transform: translateY(-10px); } | |
| } | |
| /* Dark mode specific enhancements */ | |
| .dark .glass-card { | |
| background: hsl(var(--background) / 0.4); | |
| border: 1px solid hsl(var(--border) / 0.2); | |
| } | |
| .dark .gradient-mesh { | |
| background: | |
| radial-gradient(at 40% 20%, hsla(248, 73%, 70%, 0.15) 0px, transparent 50%), | |
| radial-gradient(at 80% 0%, hsla(280, 55%, 55%, 0.1) 0px, transparent 50%), | |
| radial-gradient(at 0% 50%, hsla(199, 89%, 48%, 0.1) 0px, transparent 50%), | |
| radial-gradient(at 80% 50%, hsla(340, 65%, 50%, 0.08) 0px, transparent 50%); | |
| } | |
| /* Underline animation */ | |
| .underline-animate { | |
| position: relative; | |
| } | |
| .underline-animate::after { | |
| content: ''; | |
| position: absolute; | |
| bottom: -2px; | |
| left: 0; | |
| width: 0; | |
| height: 2px; | |
| background: hsl(var(--primary)); | |
| transition: width 0.3s ease; | |
| } | |
| .underline-animate:hover::after { | |
| width: 100%; | |
| } | |
| /* ─────────────────────────────────────────────── | |
| EXTREME ANIMATIONS - Next Level UI | |
| ─────────────────────────────────────────────── */ | |
| /* Electric pulse effect */ | |
| @keyframes electric-pulse { | |
| 0%, 100% { | |
| filter: drop-shadow(0 0 2px hsl(var(--primary))); | |
| } | |
| 25% { | |
| filter: drop-shadow(0 0 8px hsl(var(--primary))) drop-shadow(0 0 20px hsl(var(--primary))); | |
| } | |
| 50% { | |
| filter: drop-shadow(0 0 15px hsl(var(--primary))) drop-shadow(0 0 40px hsl(var(--primary))); | |
| } | |
| 75% { | |
| filter: drop-shadow(0 0 8px hsl(var(--primary))) drop-shadow(0 0 20px hsl(var(--primary))); | |
| } | |
| } | |
| .electric-glow { | |
| animation: electric-pulse 2s ease-in-out infinite; | |
| } | |
| /* Matrix rain effect */ | |
| @keyframes matrix-fall { | |
| 0% { | |
| transform: translateY(-100vh); | |
| opacity: 0; | |
| } | |
| 10% { | |
| opacity: 1; | |
| } | |
| 90% { | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: translateY(100vh); | |
| opacity: 0; | |
| } | |
| } | |
| .matrix-char { | |
| position: absolute; | |
| font-family: monospace; | |
| font-size: 14px; | |
| color: hsl(var(--primary)); | |
| text-shadow: 0 0 10px hsl(var(--primary)); | |
| animation: matrix-fall linear infinite; | |
| pointer-events: none; | |
| } | |
| /* Holographic shimmer */ | |
| @keyframes holo-shimmer { | |
| 0% { | |
| background-position: 0% 50%; | |
| filter: hue-rotate(0deg); | |
| } | |
| 50% { | |
| background-position: 100% 50%; | |
| filter: hue-rotate(180deg); | |
| } | |
| 100% { | |
| background-position: 0% 50%; | |
| filter: hue-rotate(360deg); | |
| } | |
| } | |
| .holographic { | |
| background: linear-gradient( | |
| 90deg, | |
| hsl(280, 100%, 70%), | |
| hsl(320, 100%, 60%), | |
| hsl(360, 100%, 70%), | |
| hsl(40, 100%, 60%), | |
| hsl(80, 100%, 70%), | |
| hsl(120, 100%, 60%), | |
| hsl(160, 100%, 70%), | |
| hsl(200, 100%, 60%), | |
| hsl(240, 100%, 70%), | |
| hsl(280, 100%, 70%) | |
| ); | |
| background-size: 400% 100%; | |
| -webkit-background-clip: text; | |
| background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| animation: holo-shimmer 4s linear infinite; | |
| } | |
| /* Cyberpunk glitch border */ | |
| @keyframes glitch-border { | |
| 0%, 100% { | |
| clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); | |
| } | |
| 5% { | |
| clip-path: polygon(0 10%, 100% 0, 100% 90%, 0 100%); | |
| } | |
| 10% { | |
| clip-path: polygon(0 0, 90% 0, 100% 100%, 10% 100%); | |
| } | |
| 15% { | |
| clip-path: polygon(0 0, 100% 5%, 100% 100%, 0 95%); | |
| } | |
| 20% { | |
| clip-path: polygon(5% 0, 100% 0, 95% 100%, 0 100%); | |
| } | |
| 25% { | |
| clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); | |
| } | |
| } | |
| .glitch-border { | |
| animation: glitch-border 3s ease-in-out infinite; | |
| } | |
| /* Extreme 3D flip card */ | |
| .flip-card { | |
| perspective: 2000px; | |
| transform-style: preserve-3d; | |
| } | |
| .flip-card-inner { | |
| position: relative; | |
| width: 100%; | |
| height: 100%; | |
| transition: transform 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275); | |
| transform-style: preserve-3d; | |
| } | |
| .flip-card:hover .flip-card-inner { | |
| transform: rotateY(180deg); | |
| } | |
| .flip-card-front, | |
| .flip-card-back { | |
| position: absolute; | |
| width: 100%; | |
| height: 100%; | |
| backface-visibility: hidden; | |
| border-radius: inherit; | |
| } | |
| .flip-card-back { | |
| transform: rotateY(180deg); | |
| } | |
| /* Liquid morphing animation */ | |
| @keyframes liquid-morph { | |
| 0%, 100% { | |
| border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; | |
| transform: rotate(0deg) scale(1); | |
| } | |
| 25% { | |
| border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%; | |
| transform: rotate(90deg) scale(1.1); | |
| } | |
| 50% { | |
| border-radius: 50% 60% 30% 60% / 30% 60% 70% 40%; | |
| transform: rotate(180deg) scale(1); | |
| } | |
| 75% { | |
| border-radius: 60% 40% 60% 30% / 70% 30% 50% 60%; | |
| transform: rotate(270deg) scale(1.1); | |
| } | |
| } | |
| .liquid-blob { | |
| animation: liquid-morph 20s ease-in-out infinite; | |
| } | |
| /* Plasma effect */ | |
| @keyframes plasma { | |
| 0%, 100% { | |
| filter: hue-rotate(0deg) saturate(1.5); | |
| transform: scale(1); | |
| } | |
| 33% { | |
| filter: hue-rotate(120deg) saturate(2); | |
| transform: scale(1.05); | |
| } | |
| 66% { | |
| filter: hue-rotate(240deg) saturate(1.8); | |
| transform: scale(0.95); | |
| } | |
| } | |
| .plasma-effect { | |
| animation: plasma 10s ease-in-out infinite; | |
| } | |
| /* Explosion particles */ | |
| @keyframes explode { | |
| 0% { | |
| transform: scale(0) rotate(0deg); | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: scale(3) rotate(180deg); | |
| opacity: 0; | |
| } | |
| } | |
| .explode-particle { | |
| animation: explode 1s cubic-bezier(0.36, 0, 0.66, -0.56) forwards; | |
| } | |
| /* Vortex spin */ | |
| @keyframes vortex { | |
| 0% { | |
| transform: rotate(0deg) scale(1); | |
| opacity: 1; | |
| } | |
| 50% { | |
| transform: rotate(180deg) scale(0.5); | |
| opacity: 0.5; | |
| } | |
| 100% { | |
| transform: rotate(360deg) scale(0); | |
| opacity: 0; | |
| } | |
| } | |
| .vortex-spin { | |
| animation: vortex 2s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite; | |
| } | |
| /* Breathing glow */ | |
| @keyframes breathe-glow { | |
| 0%, 100% { | |
| box-shadow: | |
| 0 0 5px hsl(var(--primary) / 0.3), | |
| 0 0 10px hsl(var(--primary) / 0.2), | |
| 0 0 20px hsl(var(--primary) / 0.1), | |
| inset 0 0 10px hsl(var(--primary) / 0.1); | |
| } | |
| 50% { | |
| box-shadow: | |
| 0 0 20px hsl(var(--primary) / 0.6), | |
| 0 0 40px hsl(var(--primary) / 0.4), | |
| 0 0 60px hsl(var(--primary) / 0.2), | |
| inset 0 0 20px hsl(var(--primary) / 0.2); | |
| } | |
| } | |
| .breathing-glow { | |
| animation: breathe-glow 4s ease-in-out infinite; | |
| } | |
| /* Cyber scan line */ | |
| @keyframes scan-line { | |
| 0% { | |
| top: 0%; | |
| } | |
| 100% { | |
| top: 100%; | |
| } | |
| } | |
| .scan-line::before { | |
| content: ''; | |
| position: absolute; | |
| left: 0; | |
| width: 100%; | |
| height: 2px; | |
| background: linear-gradient(90deg, transparent, hsl(var(--primary)), transparent); | |
| box-shadow: 0 0 10px hsl(var(--primary)); | |
| animation: scan-line 3s linear infinite; | |
| pointer-events: none; | |
| z-index: 100; | |
| } | |
| /* Floating island effect */ | |
| @keyframes floating-island { | |
| 0%, 100% { | |
| transform: translateY(0) rotateX(0deg) rotateY(0deg); | |
| } | |
| 25% { | |
| transform: translateY(-10px) rotateX(2deg) rotateY(-2deg); | |
| } | |
| 50% { | |
| transform: translateY(-5px) rotateX(0deg) rotateY(2deg); | |
| } | |
| 75% { | |
| transform: translateY(-15px) rotateX(-2deg) rotateY(0deg); | |
| } | |
| } | |
| .floating-island { | |
| animation: floating-island 8s ease-in-out infinite; | |
| transform-style: preserve-3d; | |
| } | |
| /* Extreme parallax depth */ | |
| .parallax-extreme { | |
| transform-style: preserve-3d; | |
| perspective: 1000px; | |
| } | |
| .parallax-layer-1 { | |
| transform: translateZ(-100px) scale(1.5); | |
| } | |
| .parallax-layer-2 { | |
| transform: translateZ(-50px) scale(1.25); | |
| } | |
| .parallax-layer-3 { | |
| transform: translateZ(0px) scale(1); | |
| } | |
| /* Energy wave */ | |
| @keyframes energy-wave { | |
| 0% { | |
| transform: scale(0.5); | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: scale(2); | |
| opacity: 0; | |
| } | |
| } | |
| .energy-wave { | |
| position: absolute; | |
| border: 2px solid hsl(var(--primary)); | |
| border-radius: 50%; | |
| animation: energy-wave 2s ease-out infinite; | |
| } | |
| .energy-wave:nth-child(2) { | |
| animation-delay: 0.5s; | |
| } | |
| .energy-wave:nth-child(3) { | |
| animation-delay: 1s; | |
| } | |
| /* Text reveal mask */ | |
| @keyframes text-reveal { | |
| 0% { | |
| clip-path: polygon(0 0, 0 0, 0 100%, 0 100%); | |
| } | |
| 100% { | |
| clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); | |
| } | |
| } | |
| .text-reveal { | |
| animation: text-reveal 1s cubic-bezier(0.77, 0, 0.175, 1) forwards; | |
| } | |
| /* Stagger shake */ | |
| @keyframes stagger-shake { | |
| 0%, 100% { transform: translateX(0); } | |
| 10% { transform: translateX(-5px) rotate(-1deg); } | |
| 20% { transform: translateX(5px) rotate(1deg); } | |
| 30% { transform: translateX(-5px) rotate(0deg); } | |
| 40% { transform: translateX(5px) rotate(1deg); } | |
| 50% { transform: translateX(-3px) rotate(-1deg); } | |
| 60% { transform: translateX(3px) rotate(0deg); } | |
| 70% { transform: translateX(-2px) rotate(-1deg); } | |
| 80% { transform: translateX(2px) rotate(1deg); } | |
| 90% { transform: translateX(-1px) rotate(0deg); } | |
| } | |
| .shake-hover:hover { | |
| animation: stagger-shake 0.5s ease-in-out; | |
| } | |
| /* Rainbow border animation */ | |
| @keyframes rainbow-border { | |
| 0% { border-color: hsl(0, 100%, 60%); } | |
| 17% { border-color: hsl(60, 100%, 60%); } | |
| 33% { border-color: hsl(120, 100%, 60%); } | |
| 50% { border-color: hsl(180, 100%, 60%); } | |
| 67% { border-color: hsl(240, 100%, 60%); } | |
| 83% { border-color: hsl(300, 100%, 60%); } | |
| 100% { border-color: hsl(360, 100%, 60%); } | |
| } | |
| .rainbow-border { | |
| border-width: 3px; | |
| border-style: solid; | |
| animation: rainbow-border 5s linear infinite; | |
| } | |
| /* Morphing background */ | |
| @keyframes morph-bg { | |
| 0%, 100% { | |
| background-position: 0% 50%; | |
| background-size: 200% 200%; | |
| } | |
| 50% { | |
| background-position: 100% 50%; | |
| background-size: 300% 300%; | |
| } | |
| } | |
| .morphing-bg { | |
| background: linear-gradient(135deg, | |
| hsl(var(--primary)), | |
| hsl(280, 65%, 60%), | |
| hsl(320, 75%, 55%), | |
| hsl(199, 89%, 48%), | |
| hsl(var(--primary)) | |
| ); | |
| background-size: 400% 400%; | |
| animation: morph-bg 15s ease infinite; | |
| } | |
| /* Typing cursor */ | |
| @keyframes blink { | |
| 0%, 50% { opacity: 1; } | |
| 51%, 100% { opacity: 0; } | |
| } | |
| .typing-cursor::after { | |
| content: '|'; | |
| animation: blink 1s step-end infinite; | |
| color: hsl(var(--primary)); | |
| } | |
| /* Hyperdrive lines */ | |
| @keyframes hyperdrive { | |
| 0% { | |
| transform: scale(0) rotate(0deg); | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: scale(50) rotate(180deg); | |
| opacity: 0; | |
| } | |
| } | |
| .hyperdrive-line { | |
| position: absolute; | |
| width: 2px; | |
| height: 100px; | |
| background: linear-gradient(to bottom, transparent, hsl(var(--primary)), transparent); | |
| transform-origin: center bottom; | |
| animation: hyperdrive 1s linear infinite; | |
| } | |
| /* Cosmic dust */ | |
| @keyframes cosmic-dust { | |
| 0% { | |
| transform: translateY(0) rotate(0deg) scale(0); | |
| opacity: 0; | |
| } | |
| 10% { | |
| opacity: 1; | |
| transform: translateY(-10px) rotate(36deg) scale(1); | |
| } | |
| 100% { | |
| transform: translateY(-200px) rotate(360deg) scale(0); | |
| opacity: 0; | |
| } | |
| } | |
| .cosmic-dust { | |
| position: absolute; | |
| width: 4px; | |
| height: 4px; | |
| border-radius: 50%; | |
| background: hsl(var(--primary)); | |
| box-shadow: 0 0 6px hsl(var(--primary)); | |
| animation: cosmic-dust 3s ease-out infinite; | |
| } | |
| /* Spotlight follow */ | |
| .spotlight-follow { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .spotlight-follow::before { | |
| content: ''; | |
| position: absolute; | |
| width: 300px; | |
| height: 300px; | |
| background: radial-gradient(circle, hsl(var(--primary) / 0.15) 0%, transparent 70%); | |
| border-radius: 50%; | |
| pointer-events: none; | |
| transform: translate(-50%, -50%); | |
| transition: opacity 0.3s ease; | |
| opacity: 0; | |
| } | |
| .spotlight-follow:hover::before { | |
| opacity: 1; | |
| } | |
| /* Elastic bounce */ | |
| @keyframes elastic-bounce { | |
| 0% { transform: scale(1); } | |
| 30% { transform: scale(1.25); } | |
| 40% { transform: scale(0.9); } | |
| 50% { transform: scale(1.15); } | |
| 65% { transform: scale(0.95); } | |
| 75% { transform: scale(1.05); } | |
| 100% { transform: scale(1); } | |
| } | |
| .elastic-bounce { | |
| animation: elastic-bounce 1s cubic-bezier(0.68, -0.55, 0.265, 1.55); | |
| } | |
| /* Tilt 3D effect */ | |
| .tilt-3d { | |
| transform-style: preserve-3d; | |
| transition: transform 0.3s ease; | |
| } | |
| .tilt-3d:hover { | |
| transform: perspective(1000px) rotateX(10deg) rotateY(-10deg) scale(1.05); | |
| } | |
| /* Magnetic attraction */ | |
| .magnetic { | |
| transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1); | |
| } | |
| /* Quantum particle */ | |
| @keyframes quantum { | |
| 0%, 100% { | |
| transform: translate(0, 0) scale(1); | |
| opacity: 0.8; | |
| } | |
| 25% { | |
| transform: translate(20px, -20px) scale(0.8); | |
| opacity: 0.4; | |
| } | |
| 50% { | |
| transform: translate(-10px, 10px) scale(1.2); | |
| opacity: 1; | |
| } | |
| 75% { | |
| transform: translate(-20px, -10px) scale(0.9); | |
| opacity: 0.6; | |
| } | |
| } | |
| .quantum-particle { | |
| animation: quantum 5s ease-in-out infinite; | |
| } | |
| /* Inverted perspective */ | |
| .inverted-perspective { | |
| transform: perspective(500px) rotateX(5deg); | |
| transition: transform 0.5s ease; | |
| } | |
| .inverted-perspective:hover { | |
| transform: perspective(500px) rotateX(-5deg) translateY(-10px); | |
| } | |
| /* Trail effect */ | |
| .trail-effect { | |
| position: relative; | |
| } | |
| .trail-effect::after { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| border-radius: inherit; | |
| background: inherit; | |
| opacity: 0; | |
| transform: scale(1.1); | |
| transition: all 0.3s ease; | |
| z-index: -1; | |
| } | |
| .trail-effect:hover::after { | |
| opacity: 0.3; | |
| transform: scale(1.2) translateY(10px); | |
| } | |
| /*霓虹 Noir */ | |
| .neon-noir { | |
| color: hsl(var(--foreground)); | |
| text-shadow: | |
| 0 0 5px hsl(var(--primary)), | |
| 0 0 10px hsl(var(--primary)), | |
| 0 0 20px hsl(var(--primary)), | |
| 0 0 40px hsl(var(--primary)), | |
| 0 0 80px hsl(var(--primary)); | |
| animation: neon-flicker 0.15s infinite; | |
| } | |
| @keyframes neon-flicker { | |
| 0%, 19%, 21%, 23%, 25%, 54%, 56%, 100% { | |
| text-shadow: | |
| 0 0 5px hsl(var(--primary)), | |
| 0 0 10px hsl(var(--primary)), | |
| 0 0 20px hsl(var(--primary)), | |
| 0 0 40px hsl(var(--primary)), | |
| 0 0 80px hsl(var(--primary)); | |
| } | |
| 20%, 24%, 55% { | |
| text-shadow: none; | |
| } | |
| } | |
| /* Glass morphism extreme */ | |
| .glass-extreme { | |
| background: linear-gradient( | |
| 135deg, | |
| hsl(var(--background) / 0.1) 0%, | |
| hsl(var(--background) / 0.05) 50%, | |
| hsl(var(--background) / 0.1) 100% | |
| ); | |
| backdrop-filter: blur(20px) saturate(180%); | |
| -webkit-backdrop-filter: blur(20px) saturate(180%); | |
| border: 1px solid hsl(var(--border) / 0.2); | |
| box-shadow: | |
| 0 8px 32px hsl(var(--background) / 0.3), | |
| inset 0 1px 0 hsl(var(--foreground) / 0.1), | |
| inset 0 -1px 0 hsl(var(--background) / 0.1); | |
| } | |
| /* Cyber grid */ | |
| .cyber-grid { | |
| background-image: | |
| linear-gradient(hsl(var(--primary) / 0.03) 1px, transparent 1px), | |
| linear-gradient(90deg, hsl(var(--primary) / 0.03) 1px, transparent 1px); | |
| background-size: 50px 50px; | |
| animation: grid-move 20s linear infinite; | |
| } | |
| @keyframes grid-move { | |
| 0% { background-position: 0 0; } | |
| 100% { background-position: 50px 50px; } | |
| } | |
| /* Morphing card */ | |
| .morph-card { | |
| transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1); | |
| } | |
| .morph-card:hover { | |
| border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; | |
| } | |
| /* Glitch image */ | |
| @keyframes glitch-image { | |
| 0% { | |
| filter: hue-rotate(0deg); | |
| transform: translate(0); | |
| } | |
| 10% { | |
| filter: hue-rotate(90deg); | |
| transform: translate(-5px, 5px); | |
| } | |
| 20% { | |
| filter: hue-rotate(180deg); | |
| transform: translate(5px, -5px); | |
| } | |
| 30% { | |
| filter: hue-rotate(270deg); | |
| transform: translate(-5px, -5px); | |
| } | |
| 40% { | |
| filter: hue-rotate(360deg); | |
| transform: translate(5px, 5px); | |
| } | |
| 50%, 100% { | |
| filter: hue-rotate(0deg); | |
| transform: translate(0); | |
| } | |
| } | |
| .glitch-image:hover { | |
| animation: glitch-image 0.5s ease-in-out; | |
| } | |
| /* Infinite rotate */ | |
| @keyframes infinite-rotate { | |
| from { transform: rotate(0deg); } | |
| to { transform: rotate(360deg); } | |
| } | |
| .infinite-rotate { | |
| animation: infinite-rotate 30s linear infinite; | |
| } | |
| /* Scale pulse */ | |
| @keyframes scale-pulse { | |
| 0%, 100% { transform: scale(1); } | |
| 50% { transform: scale(1.05); } | |
| } | |
| .scale-pulse { | |
| animation: scale-pulse 2s ease-in-out infinite; | |
| } | |
| /* Text scramble effect placeholder */ | |
| .scramble-text { | |
| font-family: monospace; | |
| } | |
| /* Bounce in */ | |
| @keyframes bounce-in { | |
| 0% { | |
| transform: scale(0); | |
| opacity: 0; | |
| } | |
| 50% { | |
| transform: scale(1.2); | |
| } | |
| 100% { | |
| transform: scale(1); | |
| opacity: 1; | |
| } | |
| } | |
| .bounce-in { | |
| animation: bounce-in 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55); | |
| } | |
| /* Slide up fade */ | |
| @keyframes slide-up-fade { | |
| 0% { | |
| transform: translateY(50px); | |
| opacity: 0; | |
| } | |
| 100% { | |
| transform: translateY(0); | |
| opacity: 1; | |
| } | |
| } | |
| .slide-up-fade { | |
| animation: slide-up-fade 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards; | |
| } | |
| /* Glow text */ | |
| .glow-text { | |
| text-shadow: | |
| 0 0 10px hsl(var(--primary)), | |
| 0 0 20px hsl(var(--primary)), | |
| 0 0 30px hsl(var(--primary)), | |
| 0 0 40px hsl(var(--primary)); | |
| } | |
| /* Extrude 3D */ | |
| .extrude-3d { | |
| text-shadow: | |
| 1px 1px 0 hsl(var(--primary) / 0.3), | |
| 2px 2px 0 hsl(var(--primary) / 0.25), | |
| 3px 3px 0 hsl(var(--primary) / 0.2), | |
| 4px 4px 0 hsl(var(--primary) / 0.15), | |
| 5px 5px 0 hsl(var(--primary) / 0.1); | |
| transition: all 0.3s ease; | |
| } | |
| .extrude-3d:hover { | |
| text-shadow: | |
| 1px 1px 0 hsl(var(--primary) / 0.3), | |
| 2px 2px 0 hsl(var(--primary) / 0.25), | |
| 3px 3px 0 hsl(var(--primary) / 0.2), | |
| 4px 4px 0 hsl(var(--primary) / 0.15), | |
| 5px 5px 0 hsl(var(--primary) / 0.1), | |
| 6px 6px 10px hsl(var(--background)); | |
| transform: translate(-3px, -3px); | |
| } | |
| /* Suspended animation */ | |
| @keyframes suspended { | |
| 0%, 100% { | |
| transform: translateY(0) rotate(0deg); | |
| } | |
| 25% { | |
| transform: translateY(-8px) rotate(1deg); | |
| } | |
| 50% { | |
| transform: translateY(-4px) rotate(-1deg); | |
| } | |
| 75% { | |
| transform: translateY(-12px) rotate(0.5deg); | |
| } | |
| } | |
| .suspended { | |
| animation: suspended 6s ease-in-out infinite; | |
| } | |
| /* Dynamic underline */ | |
| .dynamic-underline { | |
| position: relative; | |
| display: inline-block; | |
| } | |
| .dynamic-underline::after { | |
| content: ''; | |
| position: absolute; | |
| bottom: -4px; | |
| left: 50%; | |
| width: 0; | |
| height: 3px; | |
| background: linear-gradient(90deg, hsl(var(--primary)), hsl(280, 65%, 60%)); | |
| transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); | |
| transform: translateX(-50%); | |
| border-radius: 2px; | |
| } | |
| .dynamic-underline:hover::after { | |
| width: 120%; | |
| } | |
| /* Particle burst on click */ | |
| @keyframes particle-burst { | |
| 0% { | |
| transform: translate(0, 0) scale(1); | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: translate(var(--x, 0), var(--y, 0)) scale(0); | |
| opacity: 0; | |
| } | |
| } | |
| .particle-burst { | |
| position: absolute; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 50%; | |
| background: hsl(var(--primary)); | |
| pointer-events: none; | |
| animation: particle-burst 0.6s ease-out forwards; | |
| } |