webdev-service / app /globals.css
underrate's picture
Upload 65 files
008d962 verified
Raw
History Blame Contribute Delete
50.5 kB
@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;
}